剑指 Offer 16. 数值的整数次方
剑指 Offer 16. 数值的整数次方
思路
二分法
一个小坑
n=INT_MIN的时候(-2147483647)乘以-1会溢出
解决:使用long long存储n即可
代码
class Solution {
public:
double myPow(double x, int n) {
double res=1;
long long n1=n;
double x1=x;
if(n1==0)
return 1;
else if(n1>0)
{
while(n1>0)
{
if(n1%2==0)
{
x1=x1*x1;
}else
{
res=res*x1;
x1=x1*x1;
}
//cout<<"res"<<res<<endl;
n1/=2;
}
}
else
{
n1=n1*(-1);
while(n1>0)
{
if(n1%2==0)
{
x1=x1*x1;
}else
{
res=res*x1;
x1=x1*x1;
}
//cout<<"res"<<res<<endl;
n1/=2;
}
res=1/res;
}
return res;
}
};

浙公网安备 33010602011771号