2015-05-01 32 views
1

我很難弄清楚何時使用int,double和long。使用int,double和long來計算權力

我正在計算整數的功率並返回結果,只要所提供的功率不是負數。

對於任務,我需要使用下面的代碼開始:

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

這就是我想出了:

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; 
     } 
    } 
} 

我知道我搞亂了使用int,double或long,但我不知道如何解決它。

+0

看一看[這](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/ datatypes.html)。 –

+2

我懷疑作業的目的不是使用'Math.pow',而是通過乘以正確的次數來計算功率。我會認爲那是你老師的意圖。如果你想使用'Math.pow',你應該學習鑄造。例如,要將double轉換爲long,您會說'(long)result'。但我不認爲這是他們想要的。 –

+0

嗯。你可能是對的。我想我會更好地澄清。 – SweetMello7

回答

1

你可以自己做這件事:

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:這不處理消極的權力。

+0

如果'result == 0','result * number'是什麼?您的方法將始終返回0. –

+0

我剛編輯我的答案,我錯過了用數字初始化結果。結果* =數字與說結果=結果*數字相同。 @ martin-m-j – nramirez

+1

謝謝。該任務說我們可以拿出我們自己的實現,所以我堅持math.pow並做了編輯:(長)的結果。我剛剛提交了代碼。你們一直很有幫助。 – SweetMello7

0

如果你想使用Math.pow

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

選項1: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 
    if (power < 0){ 
     return 1; 
    } else{ 
     return (long) Math.pow(number, power); 
    } 

選項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; 
} 
2

等等!如果你自己做它,使用更快的算法像Exponentiation by squaring,這樣的事情:

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; 
}