实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
注意:
image.png这道题一个陷阱就是int的范围是-2147483648到2147483647, 负数不能直接取绝对值!!
如果单独记住一个-1, 那么又要考虑到偶数次幂的结果是正数的问题!!
double myPow(double x, int n){
double result;
double odd=1.0;
int minusFlag = 0;
if((n == 0) ||(x == 1.0))
return 1.0;
if(x == 0.0) return 0.0;
else if(n < 0)//负数次幂转换为正数
{
x = 1/x;
if(n == -2147483648) {minusFlag = 1; n++;}
n = -n;
}
result = x;
while( n > 1)
{
if(n%2 == 0)
{
result *= result;
n /= 2;
}
else{ //所有奇数次幂单独拿出来记录
odd *=result;
n--;
}
}
result *= odd;
if(minusFlag)//如果是边界数,要考虑结果是正数和在进行一次除运算
{
result /= x;
if(result<0) result = -result;
}
return result;
}
网友评论