博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
29. 两数相除
阅读量:2157 次
发布时间:2019-05-01

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

难度:中等

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

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

整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2

示例 1:

输入: dividend = 10, divisor = 3输出: 3解释: 10/3 = truncate(3.33333..) = truncate(3) = 3

示例 2:

输入: dividend = 7, divisor = -3输出: -2解释: 7/-3 = truncate(-2.33333..) = -2

提示:

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

代码:

class Solution {    public int divide(int dividend, int divisor) {        //转成long型,避免计算时整型溢出        long dividend1 = dividend, divisor1 = divisor;        long count = 0;        int flag = 1;        //将除数和被除数都转为非负数,方便计算        if (dividend1 < 0) {            dividend1 = -dividend1;            flag = -flag;        }        if (divisor1 < 0) {            divisor1 = -divisor1;            flag = -flag;        }        long result = divide(dividend1, divisor1);        result *= flag;        return result > Integer.MAX_VALUE || result < Integer.MIN_VALUE ? Integer.MAX_VALUE : (int) result;    }    private long divide(long dividend, long divisor) {        //终止条件        if (dividend < divisor)            return 0;        //倍增的结果        long sum = divisor;        //部分 商        long count = 1;        while (dividend >= sum) {            sum <<= 1;            count <<= 1;        }        //此时sum是大于dividend的,回退一步        sum >>= 1;        count >>= 1;        //返回部分商和未包括的被除数        return count + divide(dividend - sum, divisor);    }}

 

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

你可能感兴趣的文章
用 TensorFlow.js 在浏览器中训练神经网络
查看>>
cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset
查看>>
梯度消失问题与如何选择激活函数
查看>>
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
什么是 Q-learning
查看>>
用一个小游戏入门深度强化学习
查看>>
如何应用 BERT :Bidirectional Encoder Representations from Transformers
查看>>
5 分钟入门 Google 最强NLP模型:BERT
查看>>
强化学习第1课:像学自行车一样的强化学习
查看>>
强化学习第2课:强化学习,监督式学习,非监督式学习的区别
查看>>
强化学习第3课:有些问题就像个赌局
查看>>
强化学习第4课:这些都可以抽象为一个决策过程
查看>>
强化学习第5课:什么是马尔科夫决策过程
查看>>
强化学习第6课:什么是 Crossentropy 方法
查看>>
强化学习第7课:交叉熵方法的一些局限性
查看>>
强化学习 8: approximate reinforcement learning
查看>>
图解什么是 Transformer
查看>>
代码实例:如何使用 TensorFlow 2.0 Preview
查看>>
6 种用 LSTM 做时间序列预测的模型结构 - Keras 实现
查看>>