测试过的版本:考虑了n是负数的情况
测试网站:leetcode的https://oj.leetcode.com/problems/powx-n/点击打开链接
#include<iostream>
using namespace std;
double power(double x, int n)
{
doubletemp=x;
doubleresult=1;
if(n==0)
return1;
if(n<0)
return1/x/power(x,-(n+1));//注意最小的负数-2147483648,没有对应的正数!!
while(n!=0&& (n&1)==0)
{
x*=x;
n>>=1;
}
if(n==0)
returnx;
result*=x;
n--;
while(n!=0)
{
x*=x;
n>>=1;
if((n&1)==1)
{
result*=x;
n--;
}
}
return result;
}
递归版本如下:
double power(double x, int n)
{
double result=1;
if(n==0)
return 1;
if(n<0)
return 1/x/pow(x,-(n+1));//注意最小的负数-2147483648,没有对应的正数!!
while(n!=0 && (n&1)==0)
{
x*=x;
n>>=1;
}
if(n==0)
return x;
return x*pow(x,n-1);
}
int main()
{
doublex=1.200;
intn=15;
cout<<power(x,n)<<endl;
cout<<pow(x,n)<<endl;
system("pause");
return0;
}