刷题笔记(十五)——数值的整数次方
题目描述
给定一个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;
}
}
};