【C语言Coding】第五天
原创
©著作权归作者所有:来自51CTO博客作者小样小响的原创作品,请联系作者获取转载授权,否则将追究法律责任
int encryptionCalculate(int dataA, int dataB) {
while(dataB!=0){
unsigned int temp = (unsigned int)(dataA&dataB)<<1;
dataA = dataA^dataB;
dataB = temp;
}
return dataA;
}
int multiply(int A, int B){
if(A>B){
if(B==1){
return A;
}
return A+multiply(A,B-1);
}else{
if(A==1){
return B;
}
return B+multiply(A-1,B);
}
}
int divide(int dividend, int divisor){
int flag = 0;
long ans = 1;
long dend = dividend;
long sor = divisor;
if(!((dend>0&&sor>0)||(dend<0&&sor<0))) flag = 1;
dend = dend<0?-dend:dend;
sor = sor<0?-sor:sor;
if(dend < sor) return 0;
//计算商值
long sum = sor;
while(sum < dend){
sum += sum;
ans = ans<<1;
}
long temp = sor;
long pos = 1;
while(sum>dend){
sum -= temp;
temp = temp<<1;
ans -= pos;
pos = pos<<1;
}
while(sum+sor<= dend){
sum+=sor;
ans++;
}
if(dend == sor) ans = 1;
if(flag) ans = -ans;
if(ans > INT_MAX) ans = INT_MAX;
if(ans < INT_MIN) ans = INT_MIN;
return ans;
}
bool isSameAfterReversals(int num){
if(num == 0)return true;
if(num % 10 == 0) return false;
if(num>10 && num/10 == 0) return false;
if(num>100000 && num/100000 == 0) return false;
if(num>10000 && num/10000 == 0) return false;
if(num>1000 && num/1000 == 0) return false;
if(num>100 && num/100 == 0) return false;
if(num>10 && num/10 == 0) return false;
return true;
}
int mySqrt(int x){
if(x == 0) return 0;
if(x == 1) return 1;
// 二分查找
int right = x>>1,left = 1;
long mid;
while(left <= right){
mid = left + ((right - left + 1) >> 1);
if( mid * mid == x ) return mid;
if( mid * mid < x) left = mid + 1;
if(mid * mid > x) right = mid -1;
}
return left-1;
}