給定一個 double 型別的浮點數 base 和 int 型別的整數 exponent,求 base 的 exponent 次方,保證 base 和 exponent 不同時為 0
本題需要考慮三種情況:
- exponent == 0
- exponent > 0
- exponent < 0
解法一
暴力解法,分三種情況考慮
public class Solution {
public double Power(double base, int exponent) {
if(exponent < 0) {
base = 1 / base;
exponent = -exponent;
}
if(exponent == 0) {
return 1.0;
}
double result = 1.0;
for(int i = 1; i <= exponent; i++) {
result *= base;
}
return result;
}
}
解法二
使用快速冪可以解決該問題,假設我們求 x8,如果我們知道 x4,那么 x8 = (x4)2,所以 xn = (xn/2)2
但是還有個小問題,如果 n 是偶數,那么上述沒問題,如果 n 是奇數,則 xn = (xn/2)2 * x
public class Solution {
public double Power(double base, int exponent) {
if(exponent < 0) {
base = 1 / base;
exponent = -exponent;
}
return q_Power(base, exponent);
}
private double q_Power(double base, int exponet) {
if(exponet == 0) {
return 1.0;
}
double result = q_Power(base, exponet / 2);
if((exponet & 1) != 0) {
return result * result * base;
} else {
return result * result;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/132246.html
標籤:其他
