16. 數值的整數次方,快速冪,二分法,int越界用long

16. 數值的整數次方

image.png

思路一:二分法+遞歸

<自制>
分爲spa

  • n爲正/負/特殊三種狀況
  • 其中,特殊又分爲0、±1兩種狀況code

    • 先將n爲負的狀況等效爲n爲正的狀況,因而poww中只有兩種狀況;
    • 寫出特殊狀況以及n最基礎的狀況:n==2;
    • 二分法把n/2,再遞歸,直到n==2或1
  • 最終結果要分奇偶數兩種狀況遞歸

    • 偶數就是it

      x^(n/2)*x^(n/2)
    • 奇數就是(n/2 向下取整)class

      x^(n/2)*x^(n/2)*x

    image.png

  • 注意:
    最後的奇偶return能夠用三元運算符代替:基礎

    return (n%2==0)?res*res:res*res*x;

    精簡後:

    image.png

    思路二:快速冪

    image.png
    x的n次方,把n轉二進制:"bm…b3b2b1"二進制

    n = 1xb1+2xb2+4xb3+8xb4+16xb5+……+2^(m-1)bm

    因而x的n次方變爲:im

    X^[1xb1+2xb2+4xb3+8xb4+16xb5+……+2^(m-1)bm]
    =X^[1xb1]X^[2xb2]X^[4xb3]X^[8xb4]……X^[2^(m-1)bm]
    =二進制位爲1纔會乘

    操做:

    image.png

image.png的問題

將n存入long再*-1,就能夠避免,邊界越界的錯誤。(可是不知道爲何思想一沒有這個問題)
image.pngimg

相關文章
相關標籤/搜索