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));
	}
}

猜你喜欢

转载自blog.csdn.net/DjokerMax/article/details/82890027