java 使用 int、double 和 long 计算幂

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/29996070/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 16:15:43  来源:igfitidea点击:

Using int, double and long in calculation of powers

javaintdoublelong-integer

提问by SweetMello7

I'm having trouble figuring out when to use int, double and long.

我无法弄清楚何时使用 int、double 和 long。

I'm working on calculating the power of an integer and return the result as long as the power provided is not a negative number.

我正在计算整数的幂并返回结果,只要提供的幂不是负数。

For the assignment, I'm required to use the following code to start:

对于作业,我需要使用以下代码开始:

public static long powerN(int number, int power) {

Here's what I came up with:

这是我想出的:

public class PowerCalculator
{
/**
 * Calculate the non-negative power of an integer number. If a negative power is input, the method returns 1.
 * 
 * @param number The number to take power.
 * @param power The power factor to be taken to.
 * @return The calculation result after taking power of the integer number.
 */
    public static long powerN(int number, int power) {

       if (power > 0)
       {  
         double result = (Math.pow(number, power));  
         return result; 
       }
       else 
       {
         return 1; 
       }
    }
}

I know I'm messing up the use of int, double or long but I don't know how to fix it.

我知道我搞砸了 int、double 或 long 的使用,但我不知道如何解决。

采纳答案by nramirez

You could do it by yourself:

你可以自己做:

public static long powerN(
   int number, 
   int power
) {
   if(power == 0) return 1;
   int result = number;

   while(power > 1) {
      result*=number;
      power--;
   }

   return (long)result;
}

PS: This does not handle negative powers.

PS:这不处理负面权力。

回答by Julian B.

Wait! If you're doing it yourself, use a faster algorithm like Exponentiation by squaring, something like this:

等待!如果您自己做,请使用更快的算法,例如通过平方取幂,如下所示:

long powerN(long number, int power){
    long res = 1;
    long sq = number;
    while(power > 0){
        if(power % 2 == 1){
            res *= sq; 
        }
        sq = sq * sq;
        power /= 2;
    }
    return res;
}

回答by Gabriel Cypriano

In case you'd like to use Math.pow:

如果您想使用Math.pow

public static long powerN(int number, int power) {
  return (long) Math.pow(number, power);
}

回答by Guest

Option 1: Cast result of Math.pow to long:

选项 1:将 Math.pow 的结果转换为 long:

public class PowerCalculator{
/**
 * Calculate the non-negative power of an integer number. If a negative power is input, the method returns 1.
 * 
 * @param number The number to take power.
 * @param power The power factor to be taken to.
 * @return The calculation result after taking power of the integer number.
 */
public static long powerN(int number, int power) {

    // write your code after this line
    if (power < 0){
        return 1;
    } else{
        return (long) Math.pow(number, power);
    }

Option 2: without using Math.pow

选项 2:不使用 Math.pow

    public class PowerCalculator{
/**
 * Calculate the non-negative power of an integer number. If a negative power is input, the method returns 1.
 * 
 * @param number The number to take power.
 * @param power The power factor to be taken to.
 * @return The calculation result after taking power of the integer number.
 */
public static long powerN(int number, int power) {

    // write your code after this line
    long result = 1;
    while (power > 0) {
        result *= number;
        power--;
    }
    return result;
}