给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 ‘*‘、除号 ‘/‘ 以及求余符号 ‘%‘ 。

 int div1(int a,int b)
{ 
int up=a;
int down=b;
int c=0;
int neg=0;
if(a>0)
{
up=~a+1;
}


if(b>0)
{
down=~b+1;
}
//为符合边界条件,全部取负值


while(up<=down)
{int count1 =-1;

while(down>0xc0000000&&up<=(down+down))
{
down+=down;
count1+=count1;
}
up=up-down;
if(b>0)
{
down=~b+1;
}
else{down=b;}//算完一半后,根据正负重新赋值
c+=count1;
}
//如果最慢的话则每次正好减去一半 假设去除n次 则Max=2^(n1) Max/2=2^(n2).....Max/2^m=2^(nm)
//所以时间长度为 n1+n2+....nm==log2(Max)+....log2(Max/2^m)==log2(Max*Max/2*....Max/2^nm)==log2(n^m/2^(0+m)*m/2)显然符合log2n的计算
//符号取反
 if((a<0&&b<0)||(a>0&&b>0)){
      c=~c+1;
    }

return c;

}


int divide(int a, int b){
if(a==-2147483648&&b==-1)//边界条件
{return 2147483647;}



int c =div1(a,b);

return c;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值