題目描述
給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。
全面考慮問題:
1、base==0 或 base!=0
2、exponent>0 或 exponent==0 或 exponent<0
class Solution {
public:
//時間複雜度爲O(n)
double PowWithPos(double base, unsigned int exp)
{
for (int i = 0; i < -exponent; ++i)
{
res *= base;
}
}
double Power(double base, int exponent) {
double res=1.0;
if (base-0.0<-0.0000001 || base-0.0>0.00000001)
{
if (exponent == 0)
{
return 1.0;
}
else if (exponent > 0)
{
res = PowWithPos(base, exponent);
return res;
}
else
{
res = PowWithPos(base, -exponent);
return 1 / res;
}
}
else
return 0.0;
}
};
優化:
Notice:exponent>>1
和 exponent & 0x1 == 1
判斷是否爲奇數
自己實現版本:
//優化到時間複雜度O(logn)
//a^n=n爲偶數,a^(n/2)*a^(n/2)
//a^n=n爲奇數,a^(n-1/2)*a^(n-1/2)*a
double PowWithPos(double base, unsigned int exp){
if (exp == 0)
return 1;
if (exp == 1)
return base;
double res;
if (exp % 2 == 0)
{
res = PowWithPos(base, exp / 2);
res *= res;
return res;
}
else
{
res = PowWithPos(base, (exp-1) / 2);
res *= res;
res *= base;
return res;
}
}