题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解题思路:注意判断幂是负数的情况,还有底数为0的情况。
第一种递归的求法
class Solution {
public:
double Power(double base, int exponent) {
if (equal(base, 0.0) && exponent < 0)
return 0.0;
unsigned int absExponent = (unsigned int)exponent;
if (exponent < 0)
absExponent = (unsigned int)(-exponent);
double result= PowerWithUnsignedExponent(base, absExponent);
if (exponent < 0)
return 1.0 / result;
else
return result;
}
double PowerWithUnsignedExponent(double base, unsigned int absExponent)
{
if (absExponent == 0)
return 1;
if (absExponent == 1)
return base;
double result = PowerWithUnsignedExponent(base, absExponent >> 1);
result *= result;
if (absExponent & 01)
result *= base;
return result;
}
bool equal(double num1, double num2)
{
if ((num1 - num2) > -0.0000001 && (num1 - num2) < 0.0000001)
return true;
else
return false;
}
};
实际上在VS编译器中发现可以double可以直接和0比较,不受精度比较
第二种非递归
class Solution {
double Power(double base, int n) {
double res = 1, curr = base;
int exponent;
if (n > 0) {
exponent = n;
}
else if (n < 0) {
if (base == 0)
return 0.0;
exponent = -n;
}
else {// n==0
return 1;// 0的0次方
}
while (exponent != 0) {
if ((exponent & 1) == 1)
res *= curr;
curr *= curr;// 底数翻倍
exponent >>= 1;// 指数减一倍
}
return n >= 0 ? res : (1.0 / res);
}
};