Divide Two Integers
题目: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);
}
}
};

浙公网安备 33010602011771号