题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
题目分析
快速幂,不再赘述。
参考:http://www.guanhaobo.cn/?p=688
需要注意,如果exponent
为负数,需要将它转为正数,最后结果是1 / ans
C++
class Solution
{
public:
double Power(double base, int exponent)
{
if (base == 0)
return 0;
int flag = exponent < 0 ? 1 : 0; //exponent是否为负数
exponent = abs(exponent);
double ans = 1;
while (exponent)
{
if (exponent & 1)
ans *= base;
base *= base;
exponent >>= 1;
}
return flag ? 1 / ans : ans;
}
};
Java
public class Solution {
public double Power(double base, int exponent) {
if (base == 0)
return 0;
boolean flag = exponent < 0;
exponent = Math.abs(exponent);
double ans = 1;
while (exponent > 0) {
if ((exponent & 1) == 1)
ans *= base;
base *= base;
exponent >>= 1;
}
return flag ? 1 / ans : ans;
}
}