如何使用加法相乘

时间:2013-11-29 15:31:58

标签: java

有没有人知道如何通过在Java中使用加法来乘以两个整数? 例如:对于i = 4和g = 5,代码应该添加4 + 4 + 4 + 4 + 4或5 + 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;