有没有人知道如何通过在Java中使用加法来乘以两个整数? 例如:对于i = 4和g = 5,代码应该添加4 + 4 + 4 + 4 + 4或5 + 5 + 5 + 5.
这可能很简单,但我已经坐了几个小时,仍然无法找到出路。 提前谢谢!
编辑:忘了提,它应该通过递归来完成!
答案 0 :(得分:2)
int i = 4;
int g = 5;
int total = 0;
for (int inc = 0; inc < i; inc++) {
total += g;
}
答案 1 :(得分:2)
这应该有效:
public static void main(String[] args) {
int a = -4, b = 5;
int product = a * b;
int ans = add(a, b);
if (ans == product) {
System.out.println("Answer " + ans + " is correct.");
} else {
System.err.println("Answer " + ans + " is NOT correct. Correct is: " + product);
}
}
/*
* Sum of g "copies" of i.
* E.g. add(3, 5) = 3 + 3 + 3 + 3 + 3
*/
public static int add(int i, int g) {
// A little optimization. 0 * any number = 0
if (i == 0 || g == 0) {
return 0;
}
if (g < 0) {
return add(-i, -g);
}
// Since we use recursion we need a base case.
if (g == 1) {
return i;
}
// Define our problem in terms of the same problem, but of smaller size.
return i + add(i, g - 1);
}
答案 2 :(得分:1)
如果 使用递归,那么我可能会这样做:
public static int multiply(int a, int b) {
if (a == 0 || b == 0)
return 0;
if (a == 1)
return b;
if (b == 1)
return a;
if (a < 0 && b < 0)
return multiply(a * -1, b * -1);
if (a < 0)
return -1 * multiply(a * -1, b);
if (b < 0)
return -1 * multiply(a, b * -1);
return a + multiply(a, b - 1);
}
答案 3 :(得分:0)
可以用循环来做...
5 * 4将是
int result=0;
int n=5;
int m=4;
for (int i=0; i<m; i++)
{
result+=n;
}
这只会绕m
次循环,每次都会增加n
。
......或递归......
/**
* Method 1, the one you call.
* NOTE: just here to catch 0*n cases
*/
int multiply(int n, int m)
{
if (n > 0 && m > 0)
return rec_multiply(n,m);
else
return 0;
}
/**
* Method 2, one that does all the work by
* calling itself over and over till the
* correct number of additions have been done
*/
int rec_multiply(int n, int m)
{
return (m==0 ? 0 : multiply(n, m-1))) + n;
}
自己调用m
次,每次都添加n
。递归需要注意退出条件或者可能导致严重的无限循环问题。额外的方法是捕获0个条目,0 *任何东西都是0。
在递归中,您调用n = 5,m = 4的方法。它自称,每次减少第二个数字。如果它达到0,它只返回5,否则它返回另一个自身+5的调用。
答案 4 :(得分:0)
让您的老师满意的其他事情是编写如下测试:
int i = 4;
int g = 5;
int answer = yourMethod(i, g);
int check = i*g;
assert answer == check;