您的位置:首页 > 其它

25 - Divide Two Integers

2013-09-25 07:23 232 查看
solution:此题的解法是不断左移divisor和dividend比较大小,先减掉最接近dividend的值,然后右移divisor再减次接近的值,直到dividend为0(表示整除)或者有余数。

需要注意的地方是:

1,保存除数与被除数的正负值,然后取绝对值进行循环;

2,由于INT_MIN=-2147483648的存在,我们会发现abs(INT_MIN)
== INT_MIN, 因此要将其转换为long long 型,中间先有转换为usinged int, 这样也可以。

3,各种边界条件,如被除数为0,除数为0。

class Solution {
public:
int divide(int dividend, int divisor) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if( divisor == 0 )
return -1;
if( dividend == 0 )
return 0;

int positive = 1;

if(divisor < 0)    // 保存正负值信息
positive *= -1;

if(dividend < 0)
positive *= -1;

long long divis = abs( (long long)divisor ); //用long long避免INT_MIN情况
long long divid = abs( (long long)dividend );

int index = 0;
unsigned int mul[32];
while(divis <= divid && divis > 0)
{
mul[ index ] = divis;
divis = divis << 1;
index ++;
}
index --;

unsigned int remain = 0;
while( index >= 0 && divid > 0)
{
if( mul[ index ] <= divid )
{
divid = divid - mul[ index ];
remain += ( 1<<index );
}
index --;
}
if(positive < 0)
return -remain;
return remain;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: