题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
考察:指数的正负、底数是否为零等情况
1、首先判断指数为正还是为负,或者是为0(为0直接返回1)。
2、根据快速简单幂方法求得指数为正的答案。
3、判断指数:为正,直接返回结果值;为负,返回结果值的倒数(一个数的-p次幂等一这个数的p次幂的倒数)。
class Solution {
public:
double Power(double base, int exponent) {
double res = 1;
int p = exponent;
double curr = base;
if(exponent < 0){
while(base == 0)
return 0;
p = -exponent;
}else if(exponent > 0){
p = exponent;
}else{
return 1;
}
while(p){
if(p&1)
res = res*curr;
p = p>>1;
curr *= curr;
}
return (exponent >=0)?res:1/res;
}
};
思路2:直接计算法
直接判断三种情况,指数大于,小于,等于 0。
指数小于0时,注意指数为0的情况。
class Solution {
public:
double Power(double base, int n) {
double res = 1;
if(n == 0)
res = 1;
else if(n < 0){
while(n == 0)
return 0;
n = 0-n;
for(int i = 1; i<=n; i++){
res = res*base;
}
res = 1/res;
}
else{
while(base == 0)
return 0;
for (int i = 1; i<=n; i++)
res = res*base;
}
return res;
}
};