Description
Implement pow(x, n), which calculates x raised to the power n (xn).
Example
Example 1:
Input: 2.00000, 10
Output: 1024.00000
Example 2:
Input: 2.10000, 3
Output: 9.26100
Example 3:
Input: 2.00000, -2
Output: 0.25000
Explanation: 2-2 = 1/22 = 1/4 = 0.25
Note
- -100.0 < x < 100.0
- n is a 32-bit signed integer, within the range [−231, 231 − 1]
Analyse
快速幂,了解一下?
快速幂就是把幂进行分解,分解之后可以重复使用之前计算的值。
例如:310=3(1010)2=3(23+21)=38 * 32,也就是对指数进行二进制转化,然后把1的位乘起来。因为二进制能较方便的表示所有的数,而且也方便进行位运算。
噢,对,负指数也要处理一下,快速幂针对的是正整数指数。
Code
class Solution {
public:
double myPow(double x, int n) {
long ln=(long)n;
if (ln < 0) {
ln = -ln;
x = 1 / x;
}
double ans = 1, pow = x;
while (ln > 0) {
if (ln % 2 == 1) ans = ans * pow;
pow *= pow;
ln >>= 1;
}
return ans;
}
};