题目描述
描述
实现函数 double Power(double base, int exponent),求base的exponent次方。
注意:
1.保证base和exponent不同时为0。
2.不得使用库函数,同时不需要考虑大数问题
3.有特殊判题,不用考虑小数点后面0的位数。
示例1
输入:
2.00000,3复制返回值:
8.00000复制
示例2
输入:
2.10000,3复制返回值:
9.26100复制
示例3
输入:
2.00000,-2复制返回值:
0.25000复制说明:
2的-2次方等于1/4=0.25
果果念
又是很久没有刷题了,2333,确实也挺奇怪的,用C++刷题,然后面试Java岗,Java的基础需要扎实啊。好的,回归到这个题目上,经典的快速幂问题。
方法1:递归求解,正常可以想到的方法。
方法2:快速幂,利用二进制的思想进行求解,我之前好像还没有学习过,具体的思路就是拆分。例如:6d=110,那么x^6=x^(110b)=x(2^2+2^1+0^0)=x(2^2)*x(2^1)*x(0^0),对,大概就是这个样子。就是在1的位置上需要乘2.
代码1-递归
class Solution {
public:
double Power(double base, int exponent) {
if(exponent<0){
return 1.0/compute(base,-1*exponent);
}else return compute(base,exponent);
}
double compute(double base,int exp){
if(exp==0){
return 1.0;
}
else return base*compute(base,exp-1);
}
};
代码2-快速幂
class Solution {
public:
double Power(double base, int exponent) {
if(exponent<0){
exponent=-exponent;
base=1/base;
}
double ans=1;
//base:
while(exponent>0){
//二进制位数为1的,乘到答案里
if(exponent&1==1){
ans=ans*base;
}
base*=base;
exponent>>=1;//右移一位,相当于除2
}
return ans;
}
};