题目:实现函数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>
本文介绍了一个快速幂运算的实现方法,该方法不仅适用于正整数指数,也适用于0和负整数指数的情况。通过将指数转为无符号整数进行处理,并在必要时对结果取倒数的方式,有效地解决了指数为负数的问题。
2756

被折叠的 条评论
为什么被折叠?



