当一个人很闲的时候,用位运算做了加减乘除,不知道是不是正确的
long long plus_(long long a,long long b)//加
{
if(!(a&b)) return a^b;
return plus_(a^b,(a&b)<<1);
}
long long minus_(long long a,long long b)//减
{
return plus_(a,-b);
}
long long times_(long long a,long long b)//乘
{
if(!(a&(plus_(a,-1)))) a^=b^=a^=b;
long long ad=a;
if(b==1) return a;
if(!b) return 0;
long long k=1;
while(plus_(k,k)<=b)
{
a=plus_(a,a);
k=plus_(k,k);
}
return plus_(a,times_(ad,minus_(b,k)));
}
long long divided_by_(long long a,long long b)//除
{
long long l=0,r=a;
long long mid;
while(l<=r)
{
mid=(plus_(l,r)>>1);
long long ansa=times_(b,mid);
long long ansb=times_(b,mid+1);
if(ansa<=a&&ansb>a) return mid;
if(ansb==a) return plus_(mid,1);
if(ansa<a&&ansb<a) l=plus_(mid,1);
else r=minus_(mid,1);
}
}