标签:
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
举个例子比较容易理解,74 / 5, 这里 5*2=10 < 10*2=20 < 20*2=40 < 40*2=80,可以得到 5*8<74;然后剩下34,使用这一方法继续计算5*4=20 < 34,剩余14, 5*2<14,余下4舍去。故结果为8+4+2=14。
class Solution { public: int divide(int dividend, int divisor) { int ret = 0; int count = 0; long long fDivisor = divisor; long long fDividend = dividend; long long a = abs(fDividend); long long b = abs(fDivisor); long long sum = 0; int final = 0; bool flag = false; if(!fDivisor || (fDividend==INT_MIN&&fDivisor==(-1))) return INT_MAX; if(fDivisor ==0 || fDividend ==0) return 0; if(a < b) { return 0; } while(a >= b) { int count = 1; sum = b; while(sum + sum < a) { sum += sum; count += count; } a -= sum; final += count; } if(fDividend * fDivisor < 0) { final = (-1)*final; } return final; } };
标签:
原文地址:http://www.cnblogs.com/bestwangjie/p/5297789.html