11.數值的整數次方(JAVA)
阿新 • • 發佈:2018-12-17
數值的整數次方
題目描述
給定一個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。
具體實現
解題思路:
1.全面考察指數的正負、底數是否為零等情況。
2.寫出指數的二進位制表達,例如13表達為二進位制1101。
3.舉例:10^1101 = 100001*100100*10^1000。
4.通過&1和>>1來逐位讀取1101,為1時將該位代表的乘數累乘到最終結果。
public double Power(double base, int n) {
double ans = 1, temp = base;
int exponent; //用exponent來來確保n計算時是正數
if(n > 0) {
exponent = n;
}else if(n < 0) {
if(base == 0) throw new RuntimeException("分母不能為0");
exponent = -n;
}else {//0的任何次方都是0,0的0次方沒意義
return 1;
}
while(exponent != 0) {
if( (exponent & 1) == 1) {//和1做與操作,當前最後一位是1就乘上翻倍結果temp
ans *= temp;
}
temp *=temp; //翻倍,翻倍次數和下面左移位數是一致的
exponent = exponent >> 1; //exponent左移一位
}
return n>0 ? ans : (1/ans);
}