[劍指offer][Java]數(shù)值的整數(shù)次方

題目

給定一個(gè)double類型的浮點(diǎn)數(shù)base和int類型的整數(shù)exponent。求base的exponent次方。

程序核心思想

這個(gè)題目就是把所有情況羅列出來(lái)就可以了,分類討論。
要想到,指數(shù)要區(qū)分大于0、等于0、小于0的情況,因?yàn)橹笖?shù)小于0的時(shí)候,會(huì)出現(xiàn)倒數(shù)。
由于會(huì)出現(xiàn)倒數(shù),就要考慮到分母為不為0的問(wèn)題,所以,又要考慮底數(shù)是不是0.

所以一共有3*2=6種情況:

序號(hào) 情況 結(jié)果
1 底數(shù) = 0,指數(shù) > 0 for循環(huán)正常算
2 底數(shù) = 0,指數(shù) = 0 1(沒(méi)意義,但是編譯器里的結(jié)果為1)
3 底數(shù) = 0,指數(shù) < 0 ∞(根據(jù)底數(shù)是正0還是負(fù)0,有正無(wú)窮和負(fù)無(wú)窮兩種情況)
4 底數(shù) != 0,指數(shù) > 0 for循環(huán)正常算
5 底數(shù) != 0,指數(shù) = 0 1
6 底數(shù) != 0,指數(shù) < 0 1 / for循環(huán)正常算

會(huì)出現(xiàn)四種情況(底數(shù)不管是不是0,只要指數(shù)為0,結(jié)果就是1;只要指數(shù)大于0,結(jié)果就是正常算)。整理如下:

序號(hào) 情況 結(jié)果
1 指數(shù) = 0 1
2 指數(shù) > 0 for循環(huán)正常算
3 底數(shù) = 0,指數(shù) < 0 ∞(根據(jù)底數(shù)是正0還是負(fù)0,有正無(wú)窮和負(fù)無(wú)窮兩種情況)
4 底數(shù) != 0,指數(shù) < 0 1 / for循環(huán)正常算

按照這四種情況編程即可。

Tips

  • double類型的數(shù)是不是0不能通過(guò)簡(jiǎn)單的==來(lái)計(jì)算,應(yīng)該看它的絕對(duì)值是否小于一個(gè)足夠小的數(shù)。
Math.abs(base) < Math.exp(-6)
  • double 類型的除法(體現(xiàn)在本題中就是對(duì)結(jié)果取倒數(shù)),要注意自動(dòng)類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換。
 return normal(base, exponent);
  • 正無(wú)窮和負(fù)無(wú)窮的表示方法:Double.POSITIVE_INFINITY和Double.NEGATIVE_INFINITY

代碼

public class Solution {
    public double Power(double base, int exponent) {
        if(exponent == 0){
            return 1;
        }
        
        int flag_1 = 1; //正
        if(exponent < 0){
            exponent *= -1;
            flag_1 = 0; //負(fù)
        }
        
        int flag_2 = 1;//不是0
        if(Math.abs(base) < Math.exp(-6)){
            flag_2 =0; //0
        }
        
        if(flag_1 == 1){
            return normal(base, exponent);
        }else{
            if(flag_2 == 1){
                return 1.0 / normal(base, exponent);
            }else{
                if(base > 0){
                    return Double.POSITIVE_INFINITY;
                }else{
                    return Double.NEGATIVE_INFINITY;
                }
            }
        }
    }
    public double normal(double base, int exponent){
        int answer = 1; 
        for(int i = 0; i < exponent; i++){
            answer *= base;
        }
        return answer;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容