1. 程式人生 > >12. 數值的整數次方

12. 數值的整數次方

題目

給定一個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)); } }