1. 程式人生 > >11.數值的整數次方(JAVA)

11.數值的整數次方(JAVA)

數值的整數次方

題目描述

給定一個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。

具體實現

解題思路:

1.全面考察指數的正負、底數是否為零等情況。

2.寫出指數的二進位制表達,例如13表達為二進位制1101。

3.舉例:10^1101 = 100001*100100*10^1000。

4.通過&1和>>1來逐位讀取1101,為1時將該位代表的乘數累乘到最終結果。

    public double Power(double base, int n) {
        double ans = 1, temp = base;
        int
exponent; //用exponent來來確保n計算時是正數 if(n > 0) { exponent = n; }else if(n < 0) { if(base == 0) throw new RuntimeException("分母不能為0"); exponent = -n; }else {//0的任何次方都是0,0的0次方沒意義 return 1; } while(exponent != 0) { if( (exponent &
1) == 1) {//和1做與操作,當前最後一位是1就乘上翻倍結果temp ans *= temp; } temp *=temp; //翻倍,翻倍次數和下面左移位數是一致的 exponent = exponent >> 1; //exponent左移一位 } return n>0 ? ans : (1/ans); }