题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
解题思路
对于这道题来说肯定是不可能用Math.pow(i, j),这样是肯定拿不到offer的,我们可以先从简单的方式做起,也就是第一种方法。循环求出最后的结果,这也是我第一次刷这道题的做法,第二种做法就是利用二进制的位数,例如(加入exponent = 10)
1 0 0 0 0 <-----
10^32 10^16 10^8 10^4 10^2
遇到1就res *= base,没有遇到就base *= base 。不知道这样说能否了解,不懂的话结合代码吧
1)循环
public class Solution {
public double Power(double base, int exponent) {
int i = 1;
double result = 1;
while(i <= Math.abs(exponent)){
result *= base;
i++;
}
return exponent > 0 ? result : (1 / result);
}
}
2)二进制做法
public class Solution {
public double Power(double base, int exponent) {
double res = 1;
int n = exponent;
if(exponent == 0)
return 1;
if(exponent < 0)
exponent = -exponent;
while(exponent != 0){
if((exponent & 1) == 1) {
res *= base;
}
base *= base;
exponent >>= 1;
}
return n > 0 ? res : 1 / res;
}
}
以上就是这道题的解法