题目:
解答:
主要是求 n > 0 n > 0 n>0 的情况的计算,其他时候,可以通过转换得到。
而 n > 0 n > 0 n>0 的情况下,
n = a 0 2 0 + a 1 2 1 + a 2 2 2 … a m 2 m n = a_0 2^0 + a_1 2^1 + a_2 2^2 \ldots a_m 2^m n=a020+a121+a222…am2m
x n = x a 0 2 0 + a 1 2 1 + a 2 2 2 … a m 2 m x^n = x^{a_0 2^0 + a_1 2^1 + a_2 2^2 \ldots a_m 2^m} xn=xa020+a121+a222…am2m
故可以拆开递归求解
代码:
class Solution {
public:
double myPow(double x, int n) {
if( n == 0 ) return 1;
else if( n > 0 ) {
double ans = 1.0;
while( n > 0 ) {
if( n % 2 == 1 )
ans *= x;
x = x * x;
n = n / 2;
}
return ans;
}
else if( n == -2147483648 )
return 1.0 / ( myPow( x,2147483647 ) * x );
else
return 1.0 / myPow( x,-n );
}
};
更新会同步在我的网站更新(https://zergzerg.cn/notes/webnotes/leetcode/index.html)