我必须在没有*
或/
运算符的情况下进行乘法运算。我已经制作了这样的方法。
for(int i=0; i < number1; i++){
result += number2;
}
System.Out.println(result);
现在,这是我的问题:直到我的讲师改变主题,其中乘法方法必须是乘以十进制值才好。我不知道如何使用+
和-
运算符制作可以对十进制值起作用的乘法方法。
答案 0 :(得分:1)
是的,你可以使用 log 进行乘法。
<强>日志(A * B)=日志的(a)+日志(b)中强>
然后找出 log(a)+ log(b)的指数值
然后你可以转换标志..
例如:
-9 * 8 = -72
日志(9 * 8)=日志(9)+日志(8)= 2.19 + 2.07 = 4.27
E 1 4.27 = 72
现在只有一个 - 没有。那么它是-72
否则它是72
我正在写函数:
void multiply(int num1,int num2)
{
int counter=0;
if(num1<0)
{counter++;num1+=num1+num1;}
if(num2<0)
{counter++;num2+=num2+num2;}
double res=Math.log(num1)+Math.log(num2);
int result=(int)Math.exp(res);
if(counter%2==0)
System.out.println("the result is:"+result);
else
System.out.println("the result is:-"+result);
}
希望这会对你有帮助....
答案 1 :(得分:1)
你取十进制数并逐步移动小数点,直到有一个int:0.041 - &gt; 1.步骤0.41 - &gt; 2.步骤4.1-&gt; 3.步骤41
乘以0.041 * 3可以通过上述步骤进行3次,乘以41 * 3 = 123.对于结果,你取123并且不用步骤:1。12.3,2。1.23,3。0.123。结果如下:0.123 = 0.041 * 3.
编辑: 要确定每个数字的小数位数,您可以在此问题中找到答案:How many decimal Places in A Double (Java)
答案在其他方面显示了解决这个问题的两种方法非常简单:将数字放入String并检查此String中的“。” - DecimalPoint,或者使用具有scale()的BigDecimal类型 - 返回小数位数。
答案 2 :(得分:0)
你不应该期待完整的代码:但这里有一个提示来实现这一点。
尝试使用recursion
技术代替for
循环。
public double multiplyMe(double x, double y)
{
if(y == 0 || x == 0)
return 0;
if(y > 0 && x > 0 )
return (x + multiplyMe(x, y-1)); // multiply positive
if(y < 0 || x < 0 )
return - multiplyMe(x, -y); // multiply negative
}
使用log的另一种方法:
10加权(log10(x)和log10(y)之和)
答案 3 :(得分:0)
这种方法可能更容易理解。您必须添加a
b
次,或相当于b
a
次。此外,您需要处理a
和b
可以是正面或负面的4种不同情况。
public int multiply(int a, int b){
int result = 0;
if (a < 0 && b < 0){
for (int i = a; i <= -1; i++)
result-=b;
}
else if (a < 0){
for (int i = 1; i <= b; i++)
result+=a;
}
else if (b < 0){
for (int i = 1; i <= a; i++)
result+=b;
}
else {
for (int i = 1; i <= b; i++)
result+=a;
}
return result;
}
public static void main(String[] args){
System.out.println(multiply(3,-13)); // -39
}