实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。
思路:xn可以表示为(x2)n/2,当n是整数时,有两种情况:
1.n是偶数:xn=(x2)n/2;
2.n是奇数:xn=x*(x2)n/2;
根据二分推导,可通过循环 x = x2操作,每次把幂从 n 降至 n/2,直至将幂降为 0 ;
设 res=1,则初始状态 xn = xn
×
\times
× res。在循环二分时,每当 n 为奇数时,将多出的一项 x 乘入res ,则最终可化至 xn = x0
×
\times
× res = res,返回 res 即可。
double myPow(double x, int n) {
if(x==0)return 0;
int flag=0;
long long times=n;
if(times<0){
flag=1;
times*=-1;
}
double ans=1;
while(times){
if(times&1)
ans*=x;
x*=x;
times=times>>1;
}
return flag?(1/ans):ans;
}