博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]两数相除
阅读量:6324 次
发布时间:2019-06-22

本文共 1218 字,大约阅读时间需要 4 分钟。

给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

返回被除数 dividend 除以除数 divisor 得到的商。

示例 1:

输入: dividend = 10, divisor = 3

输出: 3
示例 2:

输入: dividend = 7, divisor = -3

输出: -2
说明:

被除数和除数均为 32 位有符号整数。

除数不为 0。
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。

思路:

1.先判断除完之后结果溢出的情况,只有在MIN_VALUE,且除数为-1时,求得结果将会大于MAX_VALUE,其他情况下不会产生溢出的情况2.当被除数和除数都为0时,结果只能为03.由于负数除法需要记录符号位的变化,所以当两数符号不同时要标记,在最后结果取反,这时就可以将两个数都取正整数进行运算4.
private static int day1024DivideTwoIntegers(int dividend, int divisor){    //特殊情况,即会溢出的情况    if (dividend == Integer.MIN_VALUE&&divisor == -1) {        return Integer.MAX_VALUE;    }    if(dividend == 0 || divisor == 0)        return 0;    boolean flag = false;    if((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0))        flag = true;    long c = dividend;    long d = divisor;    //相当于  (c>0)?c:-c    //import static java.lang.Math.abs;    long a = abs(c);    long b = abs(d);    long sum = 0;    int count = 0;    int n = 0;    //核心算法    while(a >= b){        sum = b;        count = 1;        while(sum + sum <= a){            sum += sum;            count += count;        }        a -= sum;        n += count;    }    if(flag)        return -n;    return n;}

转载地址:http://cvmaa.baihongyu.com/

你可能感兴趣的文章
中国工程院院士衣宝廉:预计国内明年将有100台加氢站运行 |电动车百人会2019 ...
查看>>
区块链溯源是什么?一文带您读懂!
查看>>
为什么很多人开始反对996了?
查看>>
一文说透WordPress的自定义文章类型
查看>>
Go并发编程之美-条件变量
查看>>
k8s与CICD--一个完整的drone demo
查看>>
Redis指令与数据结构(二)
查看>>
Ubuntu ibus输入法选中删除
查看>>
12月25日云栖精选夜读 | Python拼接字符串的七种方式 ...
查看>>
swap释放过程浅析
查看>>
2017-12-21 FriceEngine试用与API中文化
查看>>
【云周刊】第212期:发布SaaS加速器:我们不做SaaS,我们只做SaaS生态的推进者和守护者...
查看>>
企业级性能、安全可靠 阿里云发布企业级大数据平台开发者版
查看>>
发力1小时到家服务,山姆与京东到家共建前置仓获10倍坪效、60%月复购率
查看>>
苹果又挖VR界大牛,这次是Jaunt 的创始人
查看>>
【直播回顾】云栖社区特邀专家蒋泽银:Jpom一款低侵入式Java运维、监控软件...
查看>>
CefSharp中ChromiumWebBrowser打开新页面处理(_blank)
查看>>
解决ipad连接不上电脑的问题
查看>>
全球数字化报告 2019 发布:每 11 秒产生一位网络新人
查看>>
Kubernetes(六) - Secret和私有仓库认证
查看>>