题目
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路1
直接使用累乘
/**
* 使用累乘
*/
public double Power(double base, int exponent) {
double result = 1;
if (exponent < 0) {
BigDecimal num = new BigDecimal(base);
if (num.compareTo(BigDecimal.ZERO) == 0)
throw new RuntimeException("分母不能为0");
for (int i = 0; i < -exponent; i++) {
result = result * base;
}
return 1 / result;
} else {
for (int i = 0; i < exponent; i++) {
result = result * base;
}
return result;
}
}
思路2
二分求解
package com.zhumq.leetcode;
import org.junit.Test;
public class BaseAndExponent {
public double power(double base,int exponent) throws Exception {
double result = 1;
//底数为0时抛出异常
if(base == 1) {
throw new Exception("底数不能为0");
}else if(exponent == 0) {
//指数为0时值为1
return 1;
}
//指数统一为正
int n = exponent > 0 ? exponent : (-exponent);
//右移一位除2
result = power(base, n >> 1);
result *= result;
//与运算判断指数奇偶性,奇数还需乘上一个base
if((n &0x1) == 1){
result *= base;
}
//根据指数正负确定返回值
return exponent > 0 ? result : 1/result;
}
@Test
public void test1() throws Exception {
double base = 12.0;
int ex = 3;
System.out.println(power(base, ex));
}
}