每天一道劍指offer-牛客網數值的整數次方
- 2019 年 10 月 4 日
- 筆記
辣條走起,每個月的刷題99元獎勵靠大家了
前言
今天的題目 每天的題目見github(看最新的日期): https://github.com/gzc426 具體的題目可以去牛客網對應專題去找。
昨天的題解
題目
每天一道劍指offer-牛客網數值的整數次方 來源:牛客網對應專題
題目詳述
給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。
題目詳解
思路
- 就是窮舉,把所有可能窮舉出來,然後對每一種情況處理。
代碼
public class Solution { public double Power(double base, int exponent) { if(exponent == 0)//指數如果是0 { if(equalZero(base) == true)//底數是0則返回0 return 0; return 1;//除了0的任何數的0次方是1 } if(exponent > 0)//指數大於0 { return complex(base,exponent);//直接計算base的exponent次方返回即可 } if(equalZero(base))//底數是0,指數小於0,因為如果指數大於0,在前面已經返回了! { if(base > 0)//底數是正0,那麼就是正無窮 return Double.POSITIVE_INFINITY; if(exponent % 2 == 0)//指數是偶數次方 return Double.POSITIVE_INFINITY;//返回正無窮 return Double.NEGATIVE_INFINITY;//其它結果負無窮 } return 1 / complex(base,exponent);//可以知道除了上述結果,其它都是指數是負數。比如2的-3次方,先計算2的3次方,最後求倒數。 } double complex(double base,int exponent) { double result = 1.0; if(exponent < 0)//如果指數小於0,比如2的-3次方,先計算2的3次方,然後求倒數 exponent = 0 - exponent; for(int i=0;i<exponent;i++) result = result * base; return result; } boolean equalZero(double base) {//判斷一個doule類型的數是不是0,必須這樣判斷,不能直接與0進行比較,因為浮點數本身不精確 if(base >0 && base < 0.00000001) return true; if(base < 0 && base > -0.00000001) return true; return false; } }
代碼截圖(為了避免代碼排版錯亂)