您的位置:首页 > 其它

【leetcode】powx-n

2014-08-22 21:51 405 查看
//二分
//注意特殊的情况,x=0,1,-1;n=0
//!!特殊的n=-2147483648,-n越界
#include <iostream>

using namespace std;
class Solution {
public:
double pow(double x, int n) {
if(x==1 || x==0){
return x;
}
if(x == -1){
if(n%2 == 0){
return 1;
}
else {
return -1;
}
}
if(n == 0){
return 1;
}
if(n < 0){
return 1.0/pow(x,-n);
}
if(n % 2 == 0){
double temp = pow(x,n/2);
return temp * temp;
}
return x * pow(x,n-1);
}
};
int main()
{
int n = -3;
double x = 	34.00515;
Solution A;
cout << A.pow(x,n) << endl;
return 0;
}


添加x=1,-1特殊情况,是因为一个测试用例,x=1,n=-2147483648通不过,但治标不治本,需要特殊处理下n为int范围里最小值的情况;

int范围为-2^31~2^31-1,即-2147483648~2147483647

修改后代码:

class Solution {
public:
double pow(double x, int n) {
if(n == -2147483648){
return 1.0/(x*pow(x,-n-1));
}
if(n == 0){
return 1;
}
if(n < 0){
return 1.0/pow(x,-n);
}
if(n % 2 == 0){
double temp = pow(x,n/2);
return temp * temp;
}
return x * pow(x,n-1);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: