• Divide Two Integers


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


    思路:注意越界问题。

    比如:

     -2147483648/1=-2147483648
     -2147483648/-1=2147483647

    最主要的应该是如何进行除法吧,思路如下:a/b,a-b --  a-2*b -- a-2*2*b,不断的迭代,设置一个while循环。

    一开始b赋值给c,在接下来的循环里for(int i=0;a>=c;i++,c<<1)

    A每次减去c,c每次自己乘以2,代表了每次里面都有2个c,

    尽管c每次乘以2,但是对于所以result每次都是需要进行(1<<i),代表第i次多少个c,a<c结束。

    下次继续循环


    代码:

    typedef long long ll;
    class Solution {
    public:
    //https://leetcode.com/problems/divide-two-integers/
        int divide(int dividend, int divisor) {
            ll a = dividend >= 0 ? dividend : -(ll)dividend;
            ll b = divisor >= 0 ? divisor : -(ll)divisor;
            ll result = 0, c = 0;
            bool sign = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0);
    
            while(a>=b){
                c=b;
                for(int i=0;a>=c;i++,c<<=1){//c<<suoy=1,每一次这个操作就会使得除数*2。因为他是迭代的,
                                            //所以循环内部是+(1<<i)-->代表多少个倍数的除数。
                    a=a-c;
                    result=result+(1<<i);
                }
            }
            if (sign) {
                return max((ll)INT_MIN, -result);
            } else {
                return min((ll)INT_MAX, result);
            }
        }
    };


  • 相关阅读:
    编辑器1.0
    react native定报预披项目知识点总结
    placeholder中文字添加换行方法
    ios端position为fixed失效的解决办法
    利用fis3构建前端项目工程
    webpack学习记录
    webpack学习记录-认识loader(二)
    webpack学习记录-初步体验(一)
    去抖(节流)
    css布局:左边定宽、右边自适应
  • 原文地址:https://www.cnblogs.com/jsrgfjz/p/8519911.html
Copyright © 2020-2023  润新知