找到另一个数字的数字?

时间:2017-05-05 01:11:10

标签: java math computer-science exponent

我正在尝试在java中编写一个函数,该函数查找操作数的结果被提升到另一个的权力。

无法使用pow功能或任何形式的循环。有什么可能的解决方案?我试过" ^"那不起作用。

public static String raiseP(int op1, int op2){
    int result  = op1 ^ op2;  //Doesn't Work
    return result; 
}

使用基本数学有没有办法做到这一点?

我写道:

public static int pow(int x, int y, int n, int z){
  if (y == n){
      System.out.println(z);
      return z;
  }
  else{
      z = z*x;
      n += 1;
      pow(x,y,n,z);
      return 0;      
  }

}
ex: pow(5,9,0,1) == 5^9

但不允许使用递归。

4 个答案:

答案 0 :(得分:3)

无法调用Math.pow或使用循环,唯一的另一种可能是使用递归:

public int powerFunction(int base, int exponent) {
    if(exponent < 0){ throw new IllegalArgumentException("unsupported negative pow");  }
    if(exponent == 0){ return 1; } 
    else{
        return base * powerFunction(base, exponent - 1);
    }
}

致电powerFunction(2, 3)会给您:1 * 2 * 2 * 2 = 8

答案 1 :(得分:1)

你可以简单地使用

pow(x,y) = exp(y*log(x))

这也是数学库中幂函数实现的一部分。

答案 2 :(得分:0)

递归可以帮助你:

public static int myPowerRec(int op1, int op2, int res) {
  if (op2 == 0) {
    return res;
  }
  else {
    return (myPowerRec(op1, op2 - 1, op1 * res));
  }
}

您需要将res初始化为1(myPowerRec(23, 2, 1)将为您提供1 * 23 * 23)。 此递归称为tail recursion,允许您在没有堆栈问题的情况下使用此函数。

请注意,您必须先检查op2值。

答案 3 :(得分:0)

使用for循环:

public static int power(a, b) { // a ^ b
  int p = 1;
  for (int i = 1, i <= b; i++)
    p *= a;
  return p;
}