Leetcode pow(x,n)
来源:互联网 发布:网络执法官注册码 编辑:程序博客网 时间:2024/05/18 02:00
Implement pow(x, n).
思路:维持循环不变量 x^n = result * factor^p = result * (factor * factor)^(p/2) 或者 (result*factor) * (factor * factor)^(p/2) ,取决于p是偶数还是奇数。
初始值,如果n>=0, factor = x; 否则,factor = 1.0/x; result = 1.0, p = n.
class Solution {public: double pow(double x, int n){ if(n<0) x = 1.0/x; double result = 1.0; while(n){ if(n%2) result *= x; x = x * x; n /= 2; } return result; }};
扩展:
Implement pow(double a, double x)
思路:将指数double x 拆成整数部分和小数部分,小数部分用在零点的Taylor展开处理。
#include <iostream>#include <iomanip>#include <cmath>using namespace std;double power_integer(double a, double x){double result = 1.0;while(x>0.5){double y = floor(x/2);if(2*y<x-0.5){result = result * a;}a = a*a;x = y;}return result;}double power_fraction(double a, double x, int n=1000){double result = 1.0, item = 1.0;double b = x*log(a);if(x>0.0){for(int i=1;i<n;i++){item *= b/i;result += item;}}return result;}double power(double a, double x, int n=1000){if(x<0) return 1.0/power(a,-x,n);return power_integer(a,floor(x))*power_fraction(a,x-floor(x),n);}int main(){double pi = atan(1)*4;cout<<setprecision(50)<<pow(pi,pi)<<endl;cout<<setprecision(50)<<power(pi,pi)<<endl;return 0;}
0 0
- LeetCode: Pow(x, n)
- LeetCode Pow(x,n)
- [Leetcode] Pow(x, n)
- LeetCode: Pow(x, n)
- Leetcode: Pow(x,n)
- [LeetCode] Pow(x, n)
- [Leetcode] Pow(x,n)
- 【leetcode】Pow(x, n)
- [LeetCode]Pow(x, n)
- [leetcode]Pow(x, n)
- LeetCode-Pow(x, n)
- LeetCode - Pow(x, n)
- LeetCode | Pow(x, n)
- Pow(x, n) -leetcode
- 【leetcode】Pow(x, n)
- 【Leetcode】Pow(x, n)
- LeetCode Pow(x, n)
- Leetcode: Pow(x, n)
- 大学生打伤猥亵女子保安遭刑拘:下次只会报警
- Ubuntu下编译ffmpeg
- 使用 PHP 读取文本(TXT)文件 并分页显示
- 汇报工作10大原则
- 如何在MySQL中设置外键约束
- Leetcode pow(x,n)
- POJ 2485 Highways 最小生成树
- hdu1159 - Common Subsequence (dp 最长公共子序列问题)
- Linux系统Domino704升级为901 64位的步骤及注意事项
- Apache服务器自定义404页面的两种方法以及.htaccess的重要命令总结
- C语言的本质(18)——函数的可变参数
- poj 3061 Subsequence
- Unity多线程(Thread)和主线程(MainThread)交互使用类——Loom工具分享
- 程序员的笑话