leetcode - Divide Two Integers
2015-06-22 16:11
309 查看
题目:
Divide Two Integers
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
分析:
1、设法在不溢出的前提下,把除数和被除数转化成正数进行计算。
2、当 dividend/divisor>2 时,利用右移一位实现除数倍增,快速求得商。否则商为1.
class Solution {
public:
int divide(int dividend, int divisor) {
if (divisor == 0)
throw exception();
if (dividend == 0x80000000 && divisor == -1)
return 0x7fffffff;
if (divisor == 0x80000000)
return dividend == 0x80000000 ? 1 : 0;
int res = 0;
bool isfushu = false;
if ((dividend>0 && divisor<0) || (dividend<0 && divisor>0))
isfushu = true;
if (dividend == 0x80000000)
{
dividend += abs(divisor);
++res;
}
dividend = abs(dividend);
divisor = abs(divisor);
res+=divide_core(dividend,divisor);
return isfushu ? -res : res;
}
int divide_core(int dividend, int divisor)
{
int res = 0;
if (divisor == dividend)
++res;
else if (divisor<dividend)
{
int r = divisor, count = 0,intmark=0x80000000;
r = r << 1;
while ((r&intmark)==0 && r <= dividend)
{
++count;
r = (r << 1);
}
if (count>0)
{
res += (1 << count);
dividend -= (divisor << count);
res+=divide_core(dividend,divisor);
}
else
{
++res;
}
}
return res;
}
};
相关文章推荐
- PHP获取音频文件的相关信息
- NSNotificationCenter和消息推送的学习
- iOS UICollectionViewContoller相关
- Bootloader
- Windows下 maven3.0.4的安装步骤+maven配置本地仓库
- Servlet内部跳转
- SQL 某月份用该月份的前三位英文表示
- Android组件的通讯——Intent
- Bower : ENOGIT git is not installed or not in the PATH
- 我是这么理解“创造”的
- 团队绩效评估
- CreateFont详细解释
- SQL注入的原理解说,挺好!
- 06.类型和成员基础
- Base64的加密解密
- Basic Calculator II
- iOS开发系列--Objective-C之KVC、KVO
- FreeRTOS学习笔记-1-Coding Standard and Style Guide(编码标准和风格)
- bzoj1012 [JSOI2008]最大数maxnumber
- MySQL学习笔记