算法题解
JZ12 数值的整数次方
解法抄录了部分牛客解题思路分享
1. 暴力解法
i如果小于0,则为正数倒数的-i次方;如果是正数,则可以通过循环i次获得答案
2. 递归的快速幂
假设我们求 ,如果我们知道 ,那么 ,所以
但是还有个小问题,如果n是偶数,那么上述没问题。
如果n是奇数, , 比如
3. 非递归的快速幂
将n转化为二进制数,例如10转为1010,那么
10 = 0 * 2的零次方 + 1 * 2的一次方 + 0 * x的二次方 + 1 * 2的三次方
那么res = x的( 0 * 2的零次方 + 1 * 2的一次方 + 0 * x的二次方 + 1 * 2的三次方)次方
即遇到1就乘,同时无论是否遇到一,x都为原来的二次方。