劍指offer 16 數值的整數次方

2021-09-28 23:11:34 字數 915 閱讀 5537

保證base和exponent不同時為0

分析:注意考慮特殊情況,當底數為0,如果指數是正整數,則可以返回1,如果底數為0,指數是負整數,那麼就會出錯,而且如果底數不是0,指數是負整數,則返回的應該是底數和正整數運算結果的倒數。因此要考慮齊全。

double powerwithunsignedexponent(double base,unsigned int exponent)

double power(double base, int exponent)

unsigned int ab***ponent = (unsigned int)exponent;

if(exponent<0)

double result = powerwithunsignedexponent(base,ab***ponent);

if(exponent<0)

result = 1/result;

return result;

}

a^n = a^(n/2)* a^(n/2)(當n為偶數的時候)

a^n = a^(n-1)/2 * a^(n-1)/2(當n為奇數的時候)

採用遞迴形式,每次求出resultresult,比如25方就先計算21=2,22=2*2=4,24=44=16,最後多計算一次16*2=32,因此判斷奇數的條件是在最後一次才有判斷成功多乘乙個的可能。

判斷奇數採用的是exponent&0x01 = 1,除2採用的是位運算,exponent>>1

double powerwithunsignedexponent2(double base,unsigned int exponent)

return result;

}

劍指Offer 16 數值的整數次方

實現函式double power double base,int exponent 求base的exponent次方,不得使用庫函式。同時不需要考慮大數問題。看到乘方,自然想到二分加速的方法。但是這個題關注的不是速度,而是考慮問題的全面性。比如幾個邊界情況,base 0,exp 0 的時候。時間複雜...

劍指offer16 數值的整數次方

題目 實現函式double power double base,int exponent 求base的exponent次方,不得使用庫函式,同時不需要考慮大數問題。一 第一種方法大體分為以下四種情況 1 底數為0,則返回0 2 底數不為0,若指數為0,則返回1 3 底數不為0,若指數為正數,呼叫po...

劍指offer16 數值的整數次方

思路方法一 暴力法 方法二 利用指數法則遞迴計算 分奇數和偶數 方法三 將n表示為二進位制來做 package jzoffer auther wwh date 2020 04 12 15 48 description public class mypow double ans 1 for int i...