【劍指Offer題解:java】數值的整數次方
阿新 • • 發佈:2021-01-28
題目
給定一個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。
保證base和exponent不同時為0
題解
1、使用內建函式
/**
* 使用內建函式
*
* @param base
* @param exponent
* @return
*/
public double Power(double base, int exponent) {
return Math.pow(base, exponent);
}
2、暴力法
暴力法:直接相乘
注意:
如果次方為負數時,我們改寫成原數倒數的exponent方
處理程式碼:
if (exponent < 0) {//如果為負數,需要進行處理
base = 1 / base;
exponent = -1 * exponent;
}
完整程式碼
/**
* 暴力法:直接相乘
*
* @param base
* @param exponent
* @return
*/
public double Power2(double base, int exponent) {
//1、判斷次方的正負
if (exponent == 0) return 1.0;
if (exponent < 0) {//如果為負數,需要進行處理
base = 1 / base;
exponent = -1 * exponent;
}
double sum = 1.0;
//直接迴圈即可
for (int i = 0; i < exponent; i++) {
sum *= base;
}
return sum;
}
3、遞迴法(冪指數)
/**
* 遞迴法:快速冪
*
* @param base
* @param exponent
* @return
*/
public double Power3(double base, int exponent) {
if (exponent == 0) return 1.0;
if (exponent < 0) {//先對次方做處理
exponent = -1 * exponent;
base = 1 / base;
}
return q_power(base,exponent);
}
public double q_power(double b, int e) {
if (e == 0) return 1.0;
double ret = Power3(b, e / 2);
if (e % 2 == 0) {//偶數
return ret * ret;
} else {//奇數
return ret * ret * b;
}
}