LeetCode_Divide Two Integers

本文介绍了一种不使用乘除模运算的方法来进行整数除法,并详细解释了为何使用longlong类型能通过测试案例。

Divide two integers without using multiplication, division and mod operator.

int divide(int dividend, int divisor) {
         int flag =1;
         if(dividend <0) flag *= -1;
         if(divisor <0)  flag *= -1;
         unsigned long long d1 = abs((long long)dividend);
         unsigned long long d2 = abs((long long)divisor);
         unsigned long long temp;
         
         if(d1 < d2)  return 0;         
         if(d1 == d2) return 1* flag;
         if(d2 == 1)  return d1* flag;
         
         unsigned long long count = 1;
         temp = d2;
         while(d1>temp){
             temp = temp<<1 ;
             count = count<<1 ;
         }
        
         int result = 0;
         while(d1 > d2){
         //下面判断中的=很关键
           while(d1 >= temp){
              d1 = d1 - temp;
              result +=  count;
           }
           temp = temp >>1;
           count = count >>1;  
         
         }
         return result*flag;
    }

这里解释下为什么必须要使用long long 才能A掉,因为计算机中的数字用补码表示,所以负数能够表示的范围比较大,去符号变正数后超过int的表示范围,所以必须使用long long 


 

转载于:https://www.cnblogs.com/graph/archive/2013/03/29/2988482.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值