2012-10-16 48 views
1

我想爲我的項目創建一個java所需的power(base,exponent)的最佳方法,其中base和exponent的類型都是int,指數< = 10但是這必須在java中完成嗎?我知道可以使用bitshift,但它本身涉及java.Kindly中bitset的用法,建議執行java中有效的功率指數方法(JDK 1.7)

+1

你想如何處理溢出? –

+1

優化會非常困難,但您可以非常輕鬆地執行'O(log指數)':http://en.wikipedia.org/wiki/Exponentiation_by_squaring - 不會計算溢出,也就是說。 – IVlad

+0

@IVlad:請注意,解決方案是'O(log指數)'整數運算,而不是'O(log指數)'時間/ ops – amit

回答

0

只需使用java.lang.BigInteger類。它有一個pow()方法,可以以一種相當有效的方式完全符合您的需求。

+0

其實modpow()工作得很好:)謝謝你們解決了這個問題:) – djscribbles

-1

由於指數在int中,因此您已經擁有數字的二進制表示形式(以及計算機的功能)。所以你應該有三個整數,基數,指數和臨時整數,你將用於計算和一個解決方案。你從這開始:

unsigned int base;//you manage input for this and exponent like you wish, probably passed in as parameters 
unsigned int exponent; 
unsigned int temp = base; 
unsigned int answer = 1; 
while (exponent!=0){ 
    if (exponent%2 == 1){ 
     answer *= temp; 
    } 
    exponent>>1; 
     temp<<1; 
} 

請試試這個算法,讓我知道它是如何工作的。 while look最大運行指數的位長(即32次)。此代碼不處理大數字或負數,但我不確定是否需要這個。