Leetcode【28】:Divide Two Integers

来源:互联网 发布:火影忍者佐助的刀淘宝 编辑:程序博客网 时间:2024/05/22 11:45

题目:不用乘除和取模运算实现两个整数的除法。

分析:不用乘除和取模,能用的就是加减和位运算(幂好像没啥意义吧)来实现了。

开始考虑到用除数不断减被除数,直到<0,不断修改商,但是这样会TLE,比如dividend=1,而divisor=INT_MAX。因此可以考虑使用移位运算,即一次减去被除数的1倍,2倍,4倍。。。当不满足时继续从头开始直到divisor<dividend。

class Solution {public:int divide(int dividend, int divisor){long long A=abs((long long)dividend);long long B=abs((long long)divisor);//必须转换成long long,防止INT_MIN转成正数时溢出。long long res=0;while(A>=B){//继续迭代直到A<Blong long C=B;int count=0;while(A>=C){A-=C;res+=1<<count;//修改商的结果count++;C=C<<1;//把被除数加倍}//某次迭代导致divisor<divisor<<count。}if((dividend>0&&divisor<0) || (dividend<0&&divisor>0))res=-res;//判定商的正负return (int)res;//转换成int}};


0 0