我是靠谱客的博主 寂寞御姐,最近开发中收集的这篇文章主要介绍两数相除,不得使用乘法、除法和模运算的思路和JAVA实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

public class Divide {
public static void main(String[] args) {
int ans = divide(11,3);
System.out.println(ans);
}
//思路:查看除数divisor 是被除数dividend 的“几倍”
public static int divide(int dividend, int divisor) {
if (divisor == 0) {
throw new RuntimeException("除数为0");
}
//被除数为0,结果为0, 如果除数为0,这里应该是抛出异常
if (dividend == 0 /*|| divisor == 0*/) {
return 0;
}
//除数为1, 结果是除数本身
if (divisor == 1) {
return dividend;
}
//除数是 -1, 结果是被除数的相反数,此时因为正负数表示的范围不一致,需要判断是否出现溢出
if (divisor == -1) {
//考虑是否溢出
if (dividend > Integer.MIN_VALUE) {
//未溢出
return -dividend;
} else {
//溢出
return Integer.MAX_VALUE;
}
}
//负数先当正数处理
long a = dividend;
long b = divisor;
int sign = 1;//默认正数
//检查结果的正负
if ((a > 0 && b < 0) || (a < 0 && b > 0)) {
sign = -1;
}
//负数先当正数处理
a = a > 0 ? a : -a;
b = b > 0 ? b : -b;
long res = div(a, b);//使用long类型,防止出现整数溢出
//判断是否溢出
if (sign > 0) {
return res > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int)res;
}
//负数
return (int)-res;
}
//例:11 / 3 --> 3 + 3 = 6 < 11, count = 2 * 1 = 2; 6 + 6 = 12 > 11-->(11 - 6) / 3, 3 + 3 = 6 > 5, count = 1
//return 2 + 1
public static long div(long a, long b) {
if (a < b) {
return 0;
}
long count = 1;
long tb = b;//
while ((tb + tb ) <= a) {
count
*= 2;
tb *= 2;
}
return count + div((a-tb),b);
}
}

最后

以上就是寂寞御姐为你收集整理的两数相除,不得使用乘法、除法和模运算的思路和JAVA实现的全部内容,希望文章能够帮你解决两数相除,不得使用乘法、除法和模运算的思路和JAVA实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部