这题要考虑的东西好多...我也不知道我怎么过的...提交失败好多次
思路很简单 我们随便想两个数,比如97和2,如何求97/2?可以将2不断左移,直到大于97,再右移一位,得到第一位的最大倍数,在这题里是32倍,然后
用97-2的32倍= 33,继续对33重复右移操作,直到余数小于2即可
中间要考虑很多特殊情况,比如移位超过int限制,比如除数为0,比如倍数的初始化。
代码如下:
class Solution {
public:
int divide(int dividend, int divisor) {
long long divi,dend,temp=0;
double result=1;
int flag = 1;
dend = abs((long long)dividend);
divi = abs((long long)divisor);
if((dividend>0&&divisor<0)||(dividend<0&&divisor>0)) flag = 0;
if(divisor==0) return 2147483647;
if(divi>dend) return 0;
while(1){
divi = divi<<1;
if(divi>dend){
divi = divi>>1;
dend = dend - divi;
if(dend<abs((long long)divisor)){
if(flag) {
if(temp+result<=2147483647) return temp+result;
return 2147483647;
}
return -temp-result;
}
temp += result;
result = 0.5;
divi = abs((long long)divisor);
}
result = result + result;
}
}
};