題目
給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。
分析
此題首先需要考慮各種底數和指數的各種情況:
底數爲0時,指數>0,值爲0
底數爲0時,指數=0,值爲1
底數爲0時,指數<0,報錯
底數不爲0時,指數>0,直接算乘方
底數不爲0時,指數=0,值爲1
底數不爲0時,指數<0,1除以乘方
代碼
double Power(double base, int exponent) {
if (base == 0) {
if (exponent < 0) {
throw "invalid input";
} else if (exponent > 0) {
return 0;
} else {
return 1;
}
} else {
double result = 1;
int e = abs(exponent);
while (e != 0) {
if (e & 1) {
result *= base;
}
base *= base;
e >>= 1;
}
if (exponent < 0) {
result = 1 / result;
}
return result;
}
}
上述使用的是快速冪算法,除此之外還可以遞歸來求冪。
遞歸思路:
判斷指數n是否爲偶數
n爲偶數,則;
n爲奇數,則;
代碼如下:
double Power(double base, int exponent) {
if (base == 0) {
if (exponent < 0) {
throw "invalid input";
} else if (exponent > 0) {
return 0;
} else {
return 1;
}
} else {
if (exponent == 1) {
return base;
} else if (exponent == 0) {
return 1;
} else {
int e = abs(exponent);
double result = Power(base, e>>1);
result *= result;
if ((e & 1) == 1) {
result *= base;
}
if (exponent < 0) {
result = 1/result;
}
return result;
}
}
}