• LeetCode 29. Divide Two Integers


    题目

    使用位运算模拟除法。

    思路很简单。首先可以想到拿被除数减去除数,直到不能减为止。
    但是这是很low的,我们可以用倍增的思想,任何数字都可以由2^x+2^y+2^z......组成的。

    所以我们用被除数减去 除数*2^x ,那么商就+= 2^x ,然后减去得到差,继续再减 除数的2^x

    class Solution {
    public:
        int divide(int dividend, int divisor) {
            
            if(dividend==0)
                return 0;
            
            int sign=1;
            
            if(dividend < 0 && divisor>0)
            {
                sign=0;
                
            }
            
            if(dividend > 0 && divisor<0)
            {
                sign=0;
               
            }
    
            long long int ans=0;
            long long int divid = abs((long long int)dividend);
            long long int divis = abs((long long int)divisor);
           
            for(int i=31;i>=0;i--)
             {
           
                 if( (divis << i ) <= divid)
                 {
                     ans += (1 << i);
                     
                     divid -= (divis << i);
                 }
            }
            
            ans = abs(ans);
            
            if(sign==0)
                ans = ~ans +1;
            
            if(ans > 2147483647)
                ans = 2147483647;
            
            if(ans < -2147483648 )
                ans = -2147483648;
            
            return ans;
            
        }    
    };
    
  • 相关阅读:
    python连接redis
    python3进行md5加密
    python操作mysql数据库
    python3操作excle
    memcache与redis的存储类型
    模块
    函数
    json与字典相互转换
    常用的Random函数
    字符串常用方法
  • 原文地址:https://www.cnblogs.com/dacc123/p/11191406.html
Copyright © 2020-2023  润新知