Q9--數值的整數次方

一、題目描述

給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。不得使用庫函數,同時不需要考慮大數問題。

二、解題思路

幾個注意點:
1、由於計算機表示小數(包括float和double型小數)都有誤差,我們不能直接用等號(==)判斷兩個小數是否相等。如果兩個小數的差的絕對值很小,比如小於0.0000001,就可以認爲它們相等。
2、要考慮指數小於0的情況
3、乘法的操作可以用下面的公式來降低複雜度:
a^n = a ^(n/2) * a^(n/2) n爲偶數
a^n = a^(n-1)/2 * a^(n-1)/2 * a n爲奇數

public class Solution {
    public double Power(double base, int exponent) {
        if(equals(base, 0.0) && exponent <= 0) return 0.0;
        if(exponent == 0) return 1;
        int absExponent =  exponent;
        if(exponent < 0) absExponent = -exponent;


        double result = powerWithExponent(base, absExponent >>1);
        result *= result;
        if((absExponent & 0x1) == 1)
            result *= base;
        if(exponent < 0) result = 1.0/result;

        return result;
  }

    public double powerWithExponent(double base, int exponent ){
        double result = 1.0;
        for(int i  =0; i < exponent; i++)
            result *= base;
        return result;
    }

    public boolean equals(double a, double b){
        if( (a-b) < 0.000000001 && (a-b) > -0.000000001)
            return true;
        return false;
    }
}
發佈了149 篇原創文章 · 獲贊 26 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章