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

相关文章
相关标签/搜索