思路:除数成倍的减少,统计减少多少次
class Solution {
public:
int divide(int dividend, int divisor) {
//取绝对值转化为正整数
long long a = abs((long long )dividend);
long long b = abs((long long )divisor);
long long res = 0;//统计除数减的次数
while(a >= b){
long long sum = 1;
long long tmp = b;
while(tmp + tmp<= a){
tmp = tmp + tmp;//tmp*2 成倍加
sum = sum + sum;//sum*2 同理
}
res += sum;//次数加
a -= tmp;//统计剩余的a
}
//右移获得符号位
return (dividend >> 31 ) ^ (divisor >> 31) ? -res : res;
}
};