题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,不考虑大数问题。
注意点:本题需要避免惯性思维,将exponent默认为正数,所以需要将exponent等于0 和 负数的情况考虑进去。
思路:正数和0时程序好处理,当指数为负数的时候,可以先对指数求绝对值,然后算出次方的结果之后再取倒数。
代码:
<span style="font-size:18px;">#include <iostream>
using namespace std;
double PowerWithUnsigned(double base, int exponent){
double result = 1.0;
while(exponent){
if(exponent&1 == 1)
result *= base;
base *= base;
exponent = exponent >> 1;
}
return result;
}
double Power(double base, int exponent){
int absExponent = exponent;
if(exponent < 0)
absExponent = -exponent;
double result = PowerWithUnsigned(base, absExponent);
if(exponent < 0)
result = 1.0 / result;
return result;
}
int main(){
cout << Power(2.0, 4) << endl;
cout << Power(2.0, -4) << endl;
cout << Power(2.0, 0) << endl;
return 0;
}</span>