题意:两整数相除,不能用乘号、除号和求模
思路:直接用除数去一个一个加,直到被除数被超过的话,会超时。解决办法每次将被除数增加1倍,同时将count也增加一倍,如果超过了被除数,那么用被除数减去当前和再继续本操作。
代码:
int divide(int dividend, int divisor) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (dividend == 0 || divisor == 0)
return 0;
int nega = 0;
if ((dividend>0&&divisor<0) || (dividend<0&&divisor>0))
nega = 1;
long long c = dividend; //先用两个long long来存一下,不然下面abs(-2147483648)会溢出,因为正数int只能到2147483647
long long d = divisor;
long long a = abs(c);
long long b = abs(d);
if (b > a)
return 0;
long long sum = 0;
int count = 0;
int final = 0;
while (a >= b)
{
count = 1; //a >= b保证了最少有一个count
sum = b;
while (sum + sum <= a){ //!!
sum += sum;
count += count;
}
a -= sum;
final += count;
}
if (nega)
final = 0 - final;
return final;
}