[leetcode]29. Divide Two Integers
2017-01-05 15:22
471 查看
Divide two integers without using multiplication, division and mod operator.
If it's overflow, return INT_MAX.
代码转载
class Solution {
public:
int divide(int dividend, int divisor)
{
long long int ret = divideLong(dividend, divisor);
if(ret > INT_MAX || ret < INT_MIN)
return INT_MAX;
return ret;
}
long long int divideLong(long long dividend, long long divisor) {
// extreme cases
if(divisor == 0)
return INT_MAX;
if(dividend == 0)
return 0;
int sign = 1;
if((dividend < 0) ^ (divisor < 0))
sign = -1;
dividend = abs(dividend);
divisor = abs(divisor);
long long ret = 0;
while(dividend > divisor)
{
int shift = 0;
long long part = 1;
while(dividend > (divisor << shift))
{
part <<= 1;
shift ++;
}
if(dividend == (divisor << shift))
{
ret += part;
break;
}
else
{// dividend < (divisor << shift)
part >>= 1;
shift --;
}
ret += part;
dividend -= (divisor << shift);
}
if(dividend == divisor)
ret ++;
return sign * ret;
}
};
If it's overflow, return INT_MAX.
代码转载
class Solution {
public:
int divide(int dividend, int divisor)
{
long long int ret = divideLong(dividend, divisor);
if(ret > INT_MAX || ret < INT_MIN)
return INT_MAX;
return ret;
}
long long int divideLong(long long dividend, long long divisor) {
// extreme cases
if(divisor == 0)
return INT_MAX;
if(dividend == 0)
return 0;
int sign = 1;
if((dividend < 0) ^ (divisor < 0))
sign = -1;
dividend = abs(dividend);
divisor = abs(divisor);
long long ret = 0;
while(dividend > divisor)
{
int shift = 0;
long long part = 1;
while(dividend > (divisor << shift))
{
part <<= 1;
shift ++;
}
if(dividend == (divisor << shift))
{
ret += part;
break;
}
else
{// dividend < (divisor << shift)
part >>= 1;
shift --;
}
ret += part;
dividend -= (divisor << shift);
}
if(dividend == divisor)
ret ++;
return sign * ret;
}
};
相关文章推荐
- C#回调函数 (赞)
- 决策树分类器-Java实现
- odoo 10 生产自动领料
- 使用Amoeba for mysql实现mysql读写分离
- 设置redis主从出现的问题
- SpringBoot学习系列基础Demo Mysql数据库
- MySQL——常用SQL优化(二)
- 使用表表达式修改数据
- 微信公众号授权及关注
- 沉香:且藏且珍惜
- 蓝鸥iOS从零基础到精通就业-OC语言入门 类目和延展
- struts2中的数据流转
- BCNet-FX(Q)在威纶通触摸屏与三菱PLC以太网通讯中的应用
- IDEA社区版安装tomcat
- js中return的作用及用法
- 关于SSD的二三事,NAND闪存的一些常识
- 搭建一个开发Predix软件的Ubuntu 系统(3)配置Java开发环境
- 学解《Effective java》之 构造器到构建器的跨越
- 设置Bioconductor和CRAN mirror,加快程序包安装速度
- 20170105