题目:不使用除法、乘法、求余来计算两个数的商
思路:思路很简单,可以用被除数不断减去除数的某个倍数,直到小于除数,结果就是商,重要的是有很多边界条件需要考虑
class Solution {
public:
int cal(unsigned int up_val,unsigned int down_val){
if(up_val==0)return 0;
if(up_val<down_val)return 0;
unsigned int val=down_val;
printf("%d\n",val);
printf("%d\n",up_val);
unsigned int coun=1;
unsigned int temp;
while(val<=up_val){
temp=val;
val<<=1;
coun<<=1;
}
coun>>=1;
return coun+cal(up_val-temp,down_val);
}
int divide(int dividend, int divisor) {
int falg=1;
int more=0;
if((dividend<0&&divisor>0)||(dividend>0&&divisor<0)){
falg=-1;
}
if(divisor==-2147483648){
if(dividend==-2147483648)return 1;
else
return 0;
}
if(dividend==-2147483648){
dividend+=abs(divisor);
more=1;
}
if(dividend==0)return 0;
int result= cal(abs(dividend),abs(divisor));
if(result==2147483647&&more==1&&falg==1)return 2147483647;
return falg*(result+more);
}
};