题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
快速幂讲解:https://www.cnblogs.com/CXCXCXC/p/4641812.html
一、代码
快速幂
// 递推写法
public class Solution {
public static double Power(double base, int exp) {
boolean flag = false;
if (exp < 0) {
flag = true;
exp = -exp;
}
double ans = 1;
while (exp > 0) {
if ((exp & 1) == 1) {
ans = ans * base;
}
exp >>= 1;
base *= base;
}
return flag ? 1 / ans : ans;
}
}
// 递归写法(没看懂)
public class Solution {
public static double Power(double base, int exp) {
boolean flag = exp < 0;
if (flag) {
exp = -exp;
}
double result = getPower(base, exp);
return flag ? 1 / result : result;
}
public static double getPower(double base, int exp) {
if (exp == 0) {
return 1;
}
if (exp == 1) {
return base;
}
double ans = getPower(base, exp >> 1);
ans *= ans;
if ((exp & 1) == 1) {
ans *= base;
}
return ans;
}
二、代码
暴力累乘
public class Solution {
public double Power(double base, int exponent) {
if (base == 0.0){
return 0.0;
}
// 前置结果设为1.0,即当exponent=0 的时候,就是这个结果
double result = 1.0d;
// 获取指数的绝对值
int e = exponent > 0 ? exponent : -exponent;
// 根据指数大小,循环累乘
for(int i = 1 ; i <= e; i ++){
result *= base;
}
// 根据指数正负,返回结果
return exponent > 0 ? result : 1 / result;
}
}