• [leetcode]Divide Two Integers


    * / mod 不能用

    其实想想,乘法不就是加法嘛

    a*b = b个a相加

     x / y = n 其实是 x = ny + r

    我们来累加y,知道ny >=  x

    就可以求的n了

    但是这里又有个麻烦那的就是。。。累加的话,按我们的条件肯定是多算了一次啦

    判断ny == x 不等就减去一次就ok

    不过这样的结果就是TLE

    INT_MAX和1,显然要枚举INT_MAX次

    那肿么办。。。

    一次一次的枚举确实有点2。。。

    但就用增量吧,每次*2

    这样的想法是对的

    但是。。问题是,累加。。。最后还是多算,觉得处理起来很麻烦啊

    那换个似乎。。。我们用x每次减去y

    直到x < y,那就是刚好

    经常遇到这样的问题,感觉很麻烦,换个角度就方便很多啊

    class Solution {
    public:
        int divide(int dividend, int divisor) {
            // without using * / mod
            // using add
            auto sign = [=](int x) {
                return x < 0 ? -1 : 1;
            };
            int d1 = sign(dividend);
            int d2 = sign(divisor);
            long long n1 = abs(static_cast<long long>(dividend));
            long long n2 = abs(static_cast<long long>(divisor));
            long long ans = 0;
            while(n1 >= n2) {
                long long base = n2;
                for(int i = 0 ; n1 >= base ; ++i) {
                    n1 -= base;
                    base <<= 1;
                    ans +=  1LL << i;
                }
            }
            int res = static_cast<int>(ans);
            if(d1 != d2) return -res;
            else return res;
        }
    };
  • 相关阅读:
    02.02.03第3章 餐饮项目案例(Power BI商业智能分析)
    02.02.02 第2章 制作power bi图表(Power BI商业智能分析)
    MySQL 目录结构信息
    Commons-FileUpload 文件上传(模板)
    Commons-FileUpload 常用API
    Java DOM方式解析XML(模板)
    常用的节点类型
    MySQL权限及登陆、退出方法
    Java 锁
    线程的状态
  • 原文地址:https://www.cnblogs.com/x1957/p/3525432.html
Copyright © 2020-2023  润新知