不使用乘法、除法、求余数,计算两个数字相除。

使用加法和减法运算。

Java实现代码如下:

 class Solution {
public int divide(int dividend, int divisor) {
if (dividend == Integer.MIN_VALUE && divisor == -) {
return Integer.MAX_VALUE;
}
long a = Math.abs((long)dividend);
long b = Math.abs((long)divisor);
int num = ;
long sum;
while (b <= a) {
sum = b;
int count = ;
while (sum + sum <= a) {
count += count;
sum += sum;
}
a = a - sum;
num = num + count;
}
if ((dividend < && divisor > ) || dividend > && divisor < ) {
num = -num;
}
return num;
}
}

上述代码用实际的例子进行解释,假设a=10,b=3,主要介绍10~19行的循环体的逻辑。

外部循环1:判断 3 <= 10满足

  内部循环1.1:3 + 3 <= 10满足,count = 2,sum = 6

  内部循环1.2:6 + 6 <= 10不满足,跳出内部循环,a = 10 - (3 + 3) = 4,num = 0 + 2 = 2

外部循环2:判断3 <= 4满足,

  内部循环2.1:3 + 3 <= 4不满足,跳出内部循环,a = 4 - 3 = 1,num = 2 + 1 = 3。

最终num=3,即为所求。可分析,这里是计算在b的倍数,不超过a的情况下,最多是b的几倍。

用连续的加法来计算乘法,用减法来计算求余。

leetcode29的更多相关文章

  1. LeetCode29 Divide Two Integers

    题目: Divide two integers without using multiplication, division and mod operator. If it is overflow, ...

  2. [Swift]LeetCode29. 两数相除 | Divide Two Integers

    Given two integers dividend and divisor, divide two integers without using multiplication, division ...

  3. LeetCode29.两数相除 JavaScript

    给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...

  4. 算法练习--LeetCode--29. Divide Two Integers

    Divide Two Integers Given two integers dividend and divisor, divide two integers without using multi ...

  5. leetcode-29.两数相除(不用乘除法和mod)

    如题,不用乘除法和mod实现两数相除. 这里引用一位clever boy 的解法. class Solution { public: int divide(int dividend, int divi ...

  6. LeetCode29 Medium 不用除号实现快速除法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 链接 Divide Two Integers 难度 Medium 描述 给定两个整数,被除数和除数,要求在不使用除号的情况下计算出两数的商 ...

  7. leetcode29 两数相除 int 与移位

    难受啊 考虑越界 考虑dividend为-2^31,用负数移位运算 class Solution { public: int divide(int dividend, int divisor) { i ...

随机推荐

  1. yocto和bitbake

    一.yocto 1.yocto简介 Yocto 是一个开源社区通过它提供模版.工具和方法帮助开发者创建基于linux内核的定制系统,支持ARM, PPC, MIPS, x86 (32 & 64 ...

  2. MySQL--增加或修改列注释

    ##=============================================## ## 在创建表的时候为字段添加注释 ## CREATE TABLE TB003 ( ID INT P ...

  3. chrome 小技巧:保持元素的hover状态

    审查元素,选中需要hover的标签 点击"Styles"菜单中的":hov",弹出 Force element state 选中相应的 :hover :acti ...

  4. js 坐标兼容性

    不同浏览器对坐标属性的支持:

  5. 编程写一个方法时,注意方法中传参数的数量最好不要超过5个,超过5个怎么办?可以用struct或class,或一个字典类

    图  1 一.从图1发现了什么问题呢? 答案:1.参数传的的太多了:2.另外注释也没写好. 说明:一个方法中,传参数的数量最好不要超过5个. 应该采用:struct或class,或一个字典类都行.其中 ...

  6. mysqldump的single-transaction

    先看一下--lock-tables和--lock-all-tables --lock-all-tables 一次性锁定所有数据库的所有表,在整个dump期间一直获取global read lock: ...

  7. Extjs Column布局常见问题及解决方法

    原文地址:http://blog.csdn.net/weoln/article/details/4339533 第一次用Extjs的column布局时遇见了很多问题,记录下来,供大家参考.column ...

  8. view的setTag() 和 getTag()应用 ViewHolder

    转自 http://www.cnblogs.com/qingblog/archive/2012/07/03/2575140.html View中的setTag(Onbect)表示给View添加一个格外 ...

  9. WebForm Response和Request以及Cookie

    Session:每一台电脑访问服务器,都会是独立的一套session,key值都一样,但是内容都是不一样的 以上所有内容,都跟cookies一样, 内置对象:用于页面之间的数据交互 为什么要使用这么内 ...

  10. python-appium520-3引入unittest,编写自动化用例

    unittest是python的测试框架,和junit相似. test.py import unittest class Apptest(unittest.TestCase): def setUp(s ...