👉 题目来源:数值的整数次方
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。
求base的exponent次方。
保证base和exponent不同时为0
思路:
- 暴力解法
- 二分法
代码
- C++
/**
* 暴力解法
* 时间复杂度O(N)
*/
#include<cstdlib>
class Solution {
public:
double Power(double base, int exponent) {
if(base == 0)
return 0;
else if(exponent == 0)
return 1;
else if(exponent > 0){
double sum = 1;
for(int i = 0 ; i < exponent; i++)
sum *= base;
return sum;
}
else{
double sum = 1;
for(int i = 0 ; i < fabs(exponent); i++)
sum *= base;
return 1/sum;
}
}
};
- Java
/**
* 二分法
* 时间复杂度O(logN)
*/
public class Solution {
public double Power(double base, int exponent) {
boolean isNegative = (exponent < 0); //是否为负数
if(base == 0)
return 0;
else if(exponent == 0)
return 1;
else{
double temp = Power(base, Math.abs(exponent)/2);
if(exponent%2 == 0) //偶数
return isNegative ? 1/(temp*temp) : temp*temp;
else // 奇数
return isNegative ? 1/(temp*temp*base) : temp*temp*base;
}
}
}