题目:Divide two integers without using multiplication, division and mod operator.
思路:注意越界问题。
比如:
-2147483648/1=-2147483648
-2147483648/-1=2147483647
最主要的应该是如何进行除法吧,思路如下:a/b,a-b -- a-2*b -- a-2*2*b,不断的迭代,设置一个while循环。
一开始b赋值给c,在接下来的循环里for(int i=0;a>=c;i++,c<<1)
A每次减去c,c每次自己乘以2,代表了每次里面都有2个c,
尽管c每次乘以2,但是对于所以result每次都是需要进行(1<<i),代表第i次多少个c,a<c结束。
下次继续循环
代码:
typedef long long ll; class Solution { public: //https://leetcode.com/problems/divide-two-integers/ int divide(int dividend, int divisor) { ll a = dividend >= 0 ? dividend : -(ll)dividend; ll b = divisor >= 0 ? divisor : -(ll)divisor; ll result = 0, c = 0; bool sign = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0); while(a>=b){ c=b; for(int i=0;a>=c;i++,c<<=1){//c<<suoy=1,每一次这个操作就会使得除数*2。因为他是迭代的, //所以循环内部是+(1<<i)-->代表多少个倍数的除数。 a=a-c; result=result+(1<<i); } } if (sign) { return max((ll)INT_MIN, -result); } else { return min((ll)INT_MAX, result); } } };