题目描述:
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof
示例:
输入: 2.00000, 10
输出: 1024.00000
输入: 2.10000, 3
输出: 9.26100
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
输入: 1.00000, -2147483648
输出: 1.00000
思路:
算法流程:
- 当 x = 0时:直接返回 0 (避免后续 x = 1 / x操作报错)。
- 初始化 res = 1.0;
- 当 n < 0时:把问题转化至 n≥0 的范围内,即执行 x = 1/x,n = - n;
- 循环计算:当n = 0时跳出;
- 当 n & 1 = 1时:将当前x乘入res (即 res *= x );
- 执行 x *= x;
- 执行 n右移一位(即 n >>1)
- 返回 res 。
代码:
class Solution {
public double myPow(double x, int n) {
long b = n;
if (b == 0) {
return 1;
} else if (b == 1) {
return x;
} else if (b < 0) {
b = -b;
x = 1.0 / x;
}
double res = 1.0;
while (b > 0) {
if ((b & 1) == 1) {
res *= x;
}
x *= x;
b = b >> 1;
}
return res;
}
}