class Solution {
public:
double myPow(double x, int n) {
bool flag=false;
if(n == 0){
return 1;
}
else if (n==-2147483648)
{
x = 1 / x;
n=2147483647;
flag=true;
}
else if(n < 0){
x = 1 / x;
n =- n;
}
double result = 1;
double x0=x;
while(n> 0){
if(n % 2 == 1){
result *= x;
}
n /= 2;
x *= x;
}
if (flag)
{
result=x0*result;
}
return result;
}
public:
double myPow(double x, int n) {
bool flag=false;
if(n == 0){
return 1;
}
else if (n==-2147483648)
{
x = 1 / x;
n=2147483647;
flag=true;
}
else if(n < 0){
x = 1 / x;
n =- n;
}
double result = 1;
double x0=x;
while(n> 0){
if(n % 2 == 1){
result *= x;
}
n /= 2;
x *= x;
}
if (flag)
{
result=x0*result;
}
return result;
}
};
1. 折半乘法,速度为 log(n); x x^2 x^4
while(n> 0){
if(n % 2 == 1){
result *= x;
}
n /= 2;
x *= x;
}
2.边界处理
int 的范围是-2147483648~2147483647 -n!=2147483647
else if (n==-2147483648)
{
x = 1 / x;
n=2147483647;
flag=true;
}
double x0=x;
if (flag)
{
result=x0*result;
}