标签:leetcode c++ divide-and-conquer

Pow(x, n)
Implement pow(x, n).
//vs2012测试代码
//divide-and-conquer
//classic
#include<iostream>
using namespace std;
class Solution {
public:
double pow(double x, int n)
{
double half;
if(n==0)
return 1.0;
if(n>0)
{
half = pow( x , n/2 );
if(n%2==0)
return half*half;
else
return half*half*x;
}
else
{
n = -n;
half = pow( x , n/2 );
if(n%2==0)
return 1.0/(half*half);
else
return 1.0/(half*half*x);
}
}
};
int main()
{
double x;
int n;
cin>>x;
cin>>n;
Solution lin;
cout<<lin.pow(x,n)<<endl;
}//方法一:自测Accepted
//divide-and-conquer
//classic
class Solution {
public:
double pow(double x, int n) {
double half;
if(n==0)
return 1.0;
if(n>0)
{
half = pow( x , n/2 );
if(n%2==0)
return half*half;
else
return half*half*x;
}
else
{
n = -n;
half = pow( x , n/2 );
if(n%2==0)
return 1.0/(half*half);
else
return 1.0/(half*half*x);
}
}
};//方法二:其他人
class Solution {
//divide-and-conquer
//classic
public:
double pow(double x, int n) {
if (n == 0) return 1.0;
// Compute x^{n/2} and store the result into a temporary
// variable to avoid unnecessary computing
double half = pow(x, n / 2);
if (n % 2 == 0)
return half * half;
else if (n > 0)
return half * half * x;
else
return half * half / x;
}
};
标签:leetcode c++ divide-and-conquer
原文地址:http://blog.csdn.net/keyyuanxin/article/details/43567119