foolish fly fox's blog
--Stay hungry, stay foolish.
--Forever young, forever weeping.
https://leetcode.com/problems/divide-two-integers/description/
Given two integers dividend
and divisor
, divide two integers without using multiplication, division and mod operator.
Return the quotient after dividing dividend
by divisor
.
The integer division should truncate toward zero.
Example 1:
dividend = 10, divisor = 3
3
Example 2:
dividend = 7, divisor = -3
-2
Note:
class Solution { public: int divide(int dividend, int divisor) { if(dividend==divisor){ return 1; } // divident=-2^31 , divisor=-1时,相除会越界 if(!(dividend^0x80000000) && (divisor==-1)){ return 0x7fffffff; } // divisor=-2^31 作为除数,并且 divident与其不相等 // 返回必为 0 if(!(divisor^0x80000000)){ return 0; } int sign = 1; int ret = 0; // 确认除数与被除数是否异号 if((dividend&0x80000000)^(divisor&0x80000000)){ sign = -1; } // 相当于 divisor = abs(divisor) if(divisor&0x80000000){ divisor = (~divisor)+1; } if(!(dividend^0x80000000)){ ret += 1; dividend += divisor; } // 相当于 dividend = abs(dividend) if(dividend&0x80000000){ dividend = (~dividend)+1; } int i = 31; // 获取除数的最高的有效位 while(!(divisor & (1<<i))){ --i; } // 使用类似辗转相除法 for(int j=30-i;j>=0;--j){ while((divisor<<j)<=dividend){ dividend -= (divisor<<j); ret += (1<<j); } } if(sign==-1){ // 取相反数:ret = -ret ret = (~ret)+1; } return ret; } };