剑指Offer--4.数值的整数次方
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.10000, 3
输出: 9.26100
示例 3:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
说明:
-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。
方法一:暴力法
分析:
只是简单的用for循环来将数字挨个相乘, 但是在LeetCode上面超时并没有通过。O(n)
代码:
class Solution {
public double myPow(double x, int n) {
double sum = 1;
long N= n;
if(N<0){
N = -N;
x = 1/x;
}
for(int i=0; i<N;i++){
sum = sum * x;
}
return sum;
}
}
方法二: 用二进制位移的方法解决
分析:
在LeetCode上面看到了一个很好的解析,可以参考一下,参考
注意:
- 关于位移:
<< : 左移运算符,num <<1,相当于num乘以2
>> : 右移运算符,num >>1,相当于num除以2
>>> : 无符号右移,忽略符号位,空位都以0补齐,(计算机中数字以补码存储,首位为符号位)。
如:a = 00110111,则a>>2 = 00001101,b=11010011,则b>>2 = 11110100;
如:a = 00110111,则a>>>2 = 00001101,b=11010011,则b>>>2 = 00110100。