一種求正整數(shù)冪的高效算法詳解
更新時(shí)間:2013年06月04日 17:27:11 作者:
本篇文章是對(duì)java中一種求正整數(shù)冪的高效算法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
核心思想是
當(dāng)n為偶數(shù)時(shí),a^n = a^n/2 × a^n/2
當(dāng)n為奇數(shù)時(shí),a^n = a^(n-1)/2 × a^(n-1)/2 × a
代碼如下:
public class Power {
public static void main(String[] args) {
System.out.println(power(5.5,5));
}
private static double power(double base, int exponent) {
if (exponent == 0)
return 1;
if (exponent == 1)
return base;
double result = power(base, exponent >> 1);
result *= result;
if ((exponent & 0x1) == 1)
result *= base;
return result;
}
}
代碼中還使用右移運(yùn)算來代替除以2,用位與運(yùn)算來代替求余判斷奇偶,這樣都要算法更加效率的多。
當(dāng)n為偶數(shù)時(shí),a^n = a^n/2 × a^n/2
當(dāng)n為奇數(shù)時(shí),a^n = a^(n-1)/2 × a^(n-1)/2 × a
代碼如下:
復(fù)制代碼 代碼如下:
public class Power {
public static void main(String[] args) {
System.out.println(power(5.5,5));
}
private static double power(double base, int exponent) {
if (exponent == 0)
return 1;
if (exponent == 1)
return base;
double result = power(base, exponent >> 1);
result *= result;
if ((exponent & 0x1) == 1)
result *= base;
return result;
}
}
代碼中還使用右移運(yùn)算來代替除以2,用位與運(yùn)算來代替求余判斷奇偶,這樣都要算法更加效率的多。
您可能感興趣的文章:
- js判斷輸入是否為正整數(shù)、浮點(diǎn)數(shù)等數(shù)字的函數(shù)代碼
- 正則文本框只能輸入正整數(shù)
- JavaScript正則表達(dá)式校驗(yàn)非零的正整數(shù)實(shí)例
- jquery 正整數(shù)數(shù)字校驗(yàn)正則表達(dá)式
- JS只能輸入正整數(shù)的簡(jiǎn)單實(shí)例
- 只能輸入小于最大數(shù)且是正整數(shù)的腳本
- 使用JavaScript判斷用戶輸入的是否為正整數(shù)(兩種方法)
- JavaScript正則表達(dá)式校驗(yàn)非正整數(shù)實(shí)例
- C++初學(xué)者之根據(jù)輸入的任何一個(gè)正整數(shù),輸出可能被表示的連續(xù)正整數(shù)
- C++求四個(gè)正整數(shù)最大公約數(shù)的方法
- JQuery判斷正整數(shù)整理小結(jié)(jQuery 文本框中只能輸入正整數(shù))
相關(guān)文章
JAVA 字符串加密、密碼加密實(shí)現(xiàn)方法
這篇文章主要介紹了JAVA 字符串加密、密碼加密實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2016-10-10子類繼承父類時(shí)構(gòu)造函數(shù)相關(guān)問題解析
這篇文章主要介紹了子類繼承父類時(shí)構(gòu)造函數(shù)相關(guān)問題解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Mybatis-Spring連接mysql 8.0配置步驟出錯(cuò)的解決方法
這篇文章主要為大家詳細(xì)介紹了Mybatis-Spring連接mysql 8.0配置步驟出錯(cuò)的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06利用javaFX實(shí)現(xiàn)移動(dòng)一個(gè)小球的示例代碼
這篇文章主要介紹了利用javaFX實(shí)現(xiàn)移動(dòng)一個(gè)小球的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09