程序员必学:快速幂算法 (3)

Leetcode上的第50号题50. Pow(x, n),刚好就可以用今天讲解的快速幂算法。以下是我的代码实现

// 递归 public double myPow(double x, int n) { if (n == 0) return 1; if (n == -1) return 1 / x; double half = myPow(x, n >> 1); half *= half; return ((n & 1) == 1) ? half * x : half; } // 非递归 public double myPow(double x, int n) { long y = (n < 0) ? -((long) n) : n; double result = 1.0; while (y > 0) { if ((y & 1) == 1) { result *= x; } x *= x; y >>= 1; } return (n < 0) ? (1 / result) : result; }

需要提醒的是

这里我用的编程语言是Java,大家可以根据自己熟悉的编程语言,对一些语法细节作出相应的调整

Leetcode上的n可能是个负数,所以上面的代码针对负数的情况作了一些处理

更多快速幂相关的问题

时间有限,这篇文章就先说到这了哈。给小伙伴们留2个快速幂相关的问题,有空的话,可以去研究一下

使用矩阵快速幂求斐波那契数列

请设计一个算法求x的y次幂模z的结果:(x ^ y) % z

假设x、y都可能是很大的整数(y大于等于0,z不等于0)

如果你特别希望我写点什么方面的内容,也可以留言建议,谢谢。欢迎关注

程序员必学:快速幂算法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspppg.html