您的位置:首页 > 其它

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: