JZ12_数值的整数次方
知识点:快速幂、递归
题目链接
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
示例1
输入: 2,3
返回值: 8.0000
解题思路
- 使用快速幂 x4 = x2 * x2 可以用递归的方法进行运算 返回条件:任何数的0次都是1
- 非递归的快速幂 x6 6的二进制是110 x不断乘2 对应二进制是1的时候就乘 x
代码
#include "cheader.h"
class Solution {
public:
double Power(double base, int exponent) {
if(exponent < 0)
return 1.0/pp(base,-exponent);
else
return pp(base,exponent);
}
//快速幂 递归拆分 返回条件:任何数的0次都是1,如果奇数还要多乘一次
double p(double b,int n){
if(n == 0)
return 1.0;
double ans = p(b,n/2);
if(n%2)
return ans *ans *b;
else
return ans *ans;
}
//非递归的快速幂 x^6 6的二进制是110 x不断乘2 对应二进制是1的时候就乘 x^(0*2^0) + x^(1*2^1) + x^(1*2^2)
double pp(double b,int n){
double x = b;
double ans = 1.0;
while(n){
if(n&1)
ans *= x;
x *= x;
n >>= 1;
}
return ans;
}
};
int main()
{
Solution s;
cout<<s.Power(2, 3)<<endl;
return 0;
}
今天也是爱zz的一天!