12. 数值的整数次方
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解题思路:
- 思路1:直接求解
- 思路2:简单快速幂:
- 写出指数的二进制表达,例如
13
的二进制为1101
- 以底数为
10
为例:10^13 = 10^1101 = 10^0001 * 10^0100 * 10^1000
- 写出指数的二进制表达,例如
解答:
// 方法1
class Solution {
public:
double Power(double base, int exponent) {
double res = 1.0;
if(exponent == 0)
return 1;
if(exponent < 0)
{
if(base == 0)
throw "The denominator cannot be 0";
else
base = 1.0 / base;
}
while(exponent)
{
res *= base;
exponent = (exponent > 0) ? --exponent : ++exponent;
}
return res;
}
};
// 方法2:
class Solution {
public:
double Power(double base, int exponent) {
double res = 1.0;
int flag = 1; // 指数正负标志位,1为正
if(exponent == 0)
return 1;
if(exponent < 0)
{
if(base == 0)
throw "The denominator cannot be 0";
else
exponent = -exponent;
flag = 0;
}
while(exponent != 0)
{
if((exponent & 1) == 1)
res *= base;
base *= base;
exponent >>= 1;
}
return flag ? res : (1 / res);
}
};
大家有兴趣可以访问我的个人博客,不定时更新一些内容哦!