leetcode 29. Divide Two Integers
2016-09-07 19:55
387 查看
只用加 减 和位运算来做除法!
方法x/y=n,即x能减n次y才小于0
然而一个个减太蠢
刚开始先减1次y
然后减2次y
再减4次y
当n次y比a大了
则重新从1次y开始减
直到x彻底小于y为止!
减了多少次y,则答案就是多少
这题还要记得处理int边界
先将所有数字转成long long
才好判断有没有越int界
long long 的取绝对值要用llabs函数才行!
int divide(int dividend, int divisor) {
// Note: The Solution object is instantiated only once.
long long a,b,res;
long long i,c,flag;
if(dividend==0)
return 0;
if((dividend>0&&divisor>0)||(dividend<0&&divisor<0))
flag=1;
else flag=-1;
a=llabs((long long)(dividend));
printf("%lld\n",a);
b=llabs((long long)(divisor));
res=0;
while(a>=b)
{
c=b;
for(i=0;a>=c;i++,c<<=1)
{
a-=c;
res+=1<<i;
}
}
res=flag*res;
if(res>2147483647)
res=2147483647;
else if(res<-2147483648)
res=-2147483648;
return (int)(res);
}
方法x/y=n,即x能减n次y才小于0
然而一个个减太蠢
刚开始先减1次y
然后减2次y
再减4次y
当n次y比a大了
则重新从1次y开始减
直到x彻底小于y为止!
减了多少次y,则答案就是多少
这题还要记得处理int边界
先将所有数字转成long long
才好判断有没有越int界
long long 的取绝对值要用llabs函数才行!
int divide(int dividend, int divisor) {
// Note: The Solution object is instantiated only once.
long long a,b,res;
long long i,c,flag;
if(dividend==0)
return 0;
if((dividend>0&&divisor>0)||(dividend<0&&divisor<0))
flag=1;
else flag=-1;
a=llabs((long long)(dividend));
printf("%lld\n",a);
b=llabs((long long)(divisor));
res=0;
while(a>=b)
{
c=b;
for(i=0;a>=c;i++,c<<=1)
{
a-=c;
res+=1<<i;
}
}
res=flag*res;
if(res>2147483647)
res=2147483647;
else if(res<-2147483648)
res=-2147483648;
return (int)(res);
}
相关文章推荐
- qt之QDrag
- 机智云开发者大会|第一个把发布会开在北京MIX的物联网公司
- 第六周作业
- 13 SQLiteOpenHelper SQLiteDatabase详解
- activemq启动异常
- linux学习笔记之 dpkg和apt区别
- 13 SQLiteOpenHelper SQLiteDatabase详解
- 美国“赌王”永利:中国人一向对赌场情有独钟 - FT中文网
- PHP输出缓冲区
- PHP输出缓冲区
- linux---TOP命令下参数说明
- 13 数据库 总结
- Invalid number format for port number
- 单元测试——基于JUnit
- 在循环过程中删除List的元素
- WebView获取网页
- Android之TypedValue.applyDimension()方法的使用
- 13 数据库 总结
- Eclipse使用Maven搭建Web项目
- Linux安装Docker