题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。不能使用库函数!
解题思路1:
正常的循环乘。需要注意解决0和负数的问题。时间复杂度O(n)
public class Solution {
public double Power(double base, int exponent) {
if(base == 0)
return 0.0;
if(exponent == 0)
return 1.0;
boolean isFu = false;
if(exponent < 0){
isFu = true;
exponent = -exponent;
}
double res = 1.0;
for(int i=1; i<=exponent; i++)
res *= base;
if(isFu)
res = 1/res;
return res;
}
}
解题思路2:
使用递归,时间复杂度O(logn)。
public class Solution {
public double Power(double base, int exponent) {
int n = Math.abs(exponent);
if(n == 0)
return 1;
if(n == 1)
return base;
double res = Power(base, n>>1);
res *= res;
if((n & 1) == 1)// 如果指数n为奇数,则要再乘一次底数base
res *= base;
if(exponent < 0)// 如果指数为负数,则应该求result的倒数
res = 1 / res;
return res;
}
}