这道题的技巧在于,使用减法来做除法。题目意思是说:不使用乘法和除法来实现除法。那么我们只能用减法罗。有很多细小的字节需要处理。
特别是如何加速使用减法。这种做法是每次使用sum+=sum来实现堆滚累加,计算的时候使用long long型来进行加法和减法,以防止溢出。具体代码实现如下:
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
class Solution
{ public: 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; } }; |