首页 > 代码库 > LeetCode 29 Divide Two Integers (不使用乘法,除法,求模计算两个数的除法)
LeetCode 29 Divide Two Integers (不使用乘法,除法,求模计算两个数的除法)
题目链接: https://leetcode.com/problems/divide-two-integers/?tab=Description
Problem :不使用乘法,除法,求模计算两个数的除法~
除法运算:被除数中包含有多少个除数的计算
由于是int类型的除法,因此结果可能超过int的最大值,当超过int的最大值时输出int的最大值
另写除法函数,计算出除法的商。
首先判断出除法运算后的结果是正数还是负数。
之后需要将被除数和除数都变为正数,进行进一步计算
当被除数小于除数时,返回0
否则,进入循环体,判断被除数包含多少个除数(这里的个数是2的整数倍)
返回结果需要查看是正数还是负数,记得加上正负号
参考代码 :
package leetcode_50;/*** * * @author pengfei_zheng * 不使用乘法、除法、求模实现除法运算 */public class Solution29 { public int divide(int dividend, int divisor) { long result = divideLong(dividend, divisor); return result > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int)result; } // It‘s easy to handle edge cases when // operate with long numbers rather than int public long divideLong(long dividend, long divisor) { // Remember the sign boolean negative = dividend < 0 != divisor < 0; // Make dividend and divisor unsign if (dividend < 0) dividend = -dividend; if (divisor < 0) divisor = -divisor; // Return if nothing to divide if (dividend < divisor) return 0; // Sum divisor 2, 4, 8, 16, 32 .... times long sum = divisor; long divide = 1; while ((sum+sum) <= dividend) { sum += sum; divide += divide; } // Make a recursive call for (devided-sum) and add it to the result return negative ? -(divide + divideLong((dividend-sum), divisor)) : (divide + divideLong((dividend-sum), divisor)); }}
LeetCode 29 Divide Two Integers (不使用乘法,除法,求模计算两个数的除法)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。