问题:
给你两个整数 a 和 b,仅仅使用加法,实现 a - b, a * b, a / b。
分析:
对于减法,因为 a - b = a + (-1) * b, 换句话说,我们只要得到 b 的相反数,就可以用加法实现 a - b。
对于乘法,a * b 相当于是 对 |a| 做 |b| 次连加, 或者对 |b| 做 |a| 次连加,但是,这里我们必须要注意,a 和 b 都有可能是负数。
对于除法,a / b 相当于是让|b| 自己加自己,然后我们设置一个计数器,当|b| 加自己大于 |a| 的时候,计数器停。但是,这里有可能会带余数(除不尽),这里,假设我们考虑的是四舍五入的方法。
减法代码:
因为我们要对b 取反,所以首先实现取反的代码:
public static int negate(int b) {
int value = (b < 0 ? 1 : -1);
int negate = 0;
while (b!= 0) {
negate += value;
b += value;
}
return negate;
}
当对 b 取反以后, a + negate(b) 就实现 a - b 了。
public static int substract(int a, int b) {
return a + negate(b);
}
乘法代码:
因为我们需要对 |a| 进行 |b| 次连加,但是,我们不知道 a, b 的正负,所以,我们首先需要取得 a, b 的绝对值,然后再决定整个乘法最后值的正负。
取绝对值代码如下:
public int abs(int value) {
if (value >= 0 ) return value;
else return negate(value);
}
决定整个乘法的正负的代码:
public static boolean positive(int a, int b) {
if ((a > 0 && b > 0) || (a < 0 && b < 0)) return true;
else return false;
}
实现乘法的代码:
public static int times(int a, int b) {
if (abs(a) > abs(b)) return times(b, a); //faster
int result = 0;
for (int i = 1; i <= abs(a); i++) {
result += abs(b);
}
if (positive(a, b) == true) return result;
else return negate(result);
}
除法代码:
public static int divide(int a, int b) {
int count = 0;
for(int i = abs(a); i >= b; i -= abs(b)) {
count++;
}
int remaining = substract(abs(a), times(abs(b), count));
if (times(remaining, 2) >= abs(b)) {
count++;
}
if (positive(a, b) == true) return count;
else return negate(count);
}
转载请注明出处:blog.csdn.net/beiyeqingteng
分享到:
相关推荐
高精度 加法 减法 乘法 除法。你想要的全部囊括了!
设计任意两个复数实现4则运算(复数加法、减法、乘法、除法)的Web程序。要求采用如下的设计模式: (1)JavaBea+JSP (2)JavaBean+Servlet+JSP
大数运算大数运算(加法/减法/乘法/除法/幂运算)
高精度运算加法乘法减法除法算法
高精加法度运算、高精度减法运算、高精度乘法运算、高精度除法运算
基于Vivado 2020.2下 16bit 32bit 无符号及有符号整数 乘法 除法 加法 减法 及开方的 IP核实现与仿真验证
js ,加法,减法,乘法,除法,计算完之后,很多小数点,比如0.3 / 3 = 0.09999999999999999,尤其是在金钱方面万万不能四舍五入,加减乘除封装为方法,方便调用,完美解决
使用struts2技术,实现页面计算器的功能,输入两个操作数,分别点击加法、减法、乘法、除法按钮,分别计算出相应的结果并显示在结果页面中。
大数乘法、除法、加法、减法、以及求平方根源代码
实现了复数类的加法add,乘法mltiply以及打印输出print函数,并编写测试类complexdemo类进行测试。
基于java的计算器..AWT的图形界面,具有加法,减法,乘法,除法等计算功能.zip
基于java的计算器..AWT的图形界面,具有加法,减法,乘法,除法等计算功能.rar
用java语言编写一个复数类,要求有实部,虚部,实现复数加法减法和比较运算
脚本首先定义了四个函数,分别用于执行加法、减法、乘法和除法运算。然后,主程序通过print函数提示用户选择运算类型,并使用input函数获取用户的选择。接下来,用户根据的选择,程序会要求用户输入两个数字,并调用...
基本操作包括有理数的加法,减法,乘法,除法,以及求有理数的分子,分母; [要求] 对数据类型进行抽象,输入时分两种情况输入,即直接输入分数和输入小数(实数)。基本操作包括有理数的加减乘除,以及根据小数求...
高精度加法 高精度减法 高精度乘法 高精度除法
模拟实现一个可视化的简单计算器,提供包括加法,减法,乘法,除法等基本操作,支持包括正负号,平方根,清零等其他功能。
用C++写的重载的大数模板 大数加法、大数乘法、大数除法、大数减法 带有注释
一个图形界面(GUI)的计算器应用程序,可以完成加法、减法、乘法、除法和取余运算。且有小数点、正负号、求倒数、退格和清零,sin,cos,平方,开平方功能
本篇文章是对(PHP实现)只使用++运算实现加法,减法,乘法,除法的方法进行了详细的分析介绍,需要的朋友参考下