仅使用Java中的添加进行指数运算

时间:2015-03-09 15:07:25

标签: java exponential

我在制作这个节目时遇到了麻烦。是否可以通过获取指数值而不使用*, ^, Math.pow来编写程序?示例I的基数为2,指数为3.

  

Q1。我应该用什么操作来帮助添加以得到正确的结果?

     

Q2。添加就够了吗?

2 个答案:

答案 0 :(得分:1)

是的,可以仅使用加法来进行取幂。请记住乘法是多次重复加法,并且取幂是多次重复乘法。

例如,您可以编写以下函数来取幂数:

double exp(long base, long exponent) {

    //when the exponent is zero
    if (exponent == 0) return 1.0;

    long result = base;
    long exponent_abs = Math.abs(exponent);

    //repeating multiplication many times to achieve exponentiation
    for (int i = 2 ; i <= exponent_abs ; ++i) {

        result = multiply(result, base);
    }

     //if the exponent is positive, return result you found.
     if (exponent > 0) return result;
     //if it is negative, return a fraction.
     return 1/((double)result);
  }

//repeating addition many times to achieve multiplication.
long multiply(long number1, long number2){
    long result = number1;

    for (int i = 1; i < number2; ++i){
        result += number1;
    }
    return result;
 }

请注意,该函数返回一个double值,因为如果指数为负数,则结果不能用整数类型表示。

答案 1 :(得分:0)

为什么你不能使用这些语言的功能? 无论如何:

public int pow (final int base, final int exponent) {
  int result = base;
  for (int i = 1; i < exponent; i++)
     for (int j = 0; j < base; j++)
         result += base;
  return result;
}

这显然只适用于整数(或真的很长),如果你有一个浮动值作为指数我不认为你可以避免^或Math.pow

请注意,我没有对此进行过测试,但应该按照这一点进行测试,我可能已经搞砸了。

你还应该注意到x ^ 0 = 1,所以在那里添加一个额外的检查。这仅适用于有符号的整数,因为此算法不适用于否定