12. 數值的整數次方
阿新 • • 發佈:2018-12-14
題目
給定一個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));
}
}