题目:求一个数a的n次方。
注意点:(1)0的0次方数学上没有意义。(2)考虑边界值处理。
解法:假如要求一个数的32次方,如果我们已经知道了它的16次方,那么只要在16次方的基础上再平方一次就可以了,以此类推。程序中可以通过移位操作来实现。
(a^n/2)*(a^n/2) n为偶数。
a^n=
(a^n-1/2)*(a^n-/2)*a n为奇数。
代码:
#include <iostream>
#include <string>
using namespace std;
double PowerAriginal(double base, int exponent)
{
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
double result = PowerAriginal(base, exponent >> 1);
result *= result;
if(exponent & 1 == 1)
result *= base;
return result;
}
int main(){
double base, result;
int exponent;
cin >> base >> exponent;
cout << base << " power " << exponent << " is " << PowerAriginal(base, exponent) << endl;
}