刷題筆記(十五)——數值的整數次方
題目描述
給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。
保證base和exponent不同時爲0
思路一:常規方法
利用while循環進行乘積計算
class Solution {
public:
double Power(double base, int exponent) {
if(base==0)return 0;
if(exponent==0)return 1;
if(exponent<0)
{ double ans=1;
exponent=-exponent;
while(exponent>=1)
{
ans=ans*base;
exponent-=1;
}
return 1/ans;
}
if(exponent>0)
{ double ans=1;
while(exponent>=1)
{
ans=ans*base;
exponent-=1;
}
return ans;
}
}
};
思路二:快速冪方法
利用指數的二進制。舉例:10^5,5的二進制爲101,可以轉化爲:10^001*10^100
class Solution {
public:
double Power(double base, int exponent) {
if(base==0)return 0;
if(exponent==0)return 1;
if(exponent<0)
{ double ans=1;
exponent=-exponent;
while(exponent>=1)
{
if((exponent&1)==1)
ans=ans*base;
base*=base;
exponent>>=1;
}
return 1/ans;
}
if(exponent>0)
{ double ans=1;
while(exponent>=1)
{
if((exponent&1)==1)
ans=ans*base;
base*=base;
exponent>>=1;
}
return ans;
}
}
};