pow(x,n)的实现
来源:互联网 发布:空间句法分析软件知乎 编辑:程序博客网 时间:2024/05/24 15:42
class Solution {public: double myPow(double x, int n) { if(n==0||x==1) return 1; if(x==0) return 0; double pro=1; long long p=abs((long long)n); //(1) while(p){ if(p&1) pro*=x; //(2) p=p>>1; //(3) x*=x; } return (n>0)?pro:1/pro; }};
(1)处:此处考虑了n为负数时候的情况,为了计算方便,先将n取绝对值,但是当n为INT_MIN,即-214748364时,若p仍为int型变量,p最大只能表示2147483647,会发生溢出,所以要改成long long类型。
(2)处:判断p是奇数还是偶数,若是奇数,与1做&运算后,结果是1,若是偶数则是0;
(3)处:将p左移1位,即除以2;
该算法的时间复杂度为log(N),思路为:将基数x不断做平方运算,同时指数n不断除2,直到指数n等于0为止,但是由于指数存在奇数的情况,所以遇到指数为奇数的情况,就将基数单独乘在乘积中;最后求出pro后,若n为负数,则取倒数,得到结果。
如求2^13:
x=2,n=13,p=n=13;
p= 13是奇数,所以pro=pro*x=2,p=p/2=6,x=4;
p= 6是偶数,所以pro=2不变,p=p/2=3,x=4^2=16;
p= 3是奇数,所以pro=pro*x=32,p=p/2=1,x=16^2=256;
p= 1是奇数,所以pro=pro*x=8192,p=p/2=0,x=256^2(此时这个数已经不重要了);
p=0,退出循环,pro=8192;
0 0
- pow(x,n)的实现
- Pow(x,n) x的n次方
- 分治法实现pow(x,n)函数的功能
- 实现浮点类型的幂运算,pow(x,n)
- 手动实现pow(x,n)的功能--20150927
- leetcode50-Pow(x, n)(实现浮点数的幂运算)
- 实现pow(double x, int n)
- 50. Pow(x, n)函数实现
- LeetCode 50. Pow(x, n)--幂实现
- 使用java实现pow(x,n)函数
- 二分算法实现幂函数x的n次方 Pow(x, n)
- X的N次方求解——pow(x,n)实现
- Pow(x, n) / Super Pow
- LeetCode 50. Pow(x, n) x的n的次方
- 求x的n次幂算法Pow(x, n)
- 【leetcode 分治法】Pow(x, n)与Sqrt(x)函数的实现
- LeetCode: Pow(x, n)
- LeetCode Pow(x,n)
- 线性代数学习笔记5
- where方法的应用
- 深度学习与计算机视觉系列(3)_线性SVM与SoftMax分类器
- Hive的几种数据导入方式
- storm消费kafka数据
- pow(x,n)的实现
- 学习笔记——ng2基本架构
- 第十五周 项目一 - 验证算法
- 【9308】极值问题
- 如何过滤多余的cpu支持文件
- php中Session使用方法详解
- 过滤器(Filter)应用之------设置页面缓存、用户的自动登录和敏感词过滤
- QListWidget列表控件
- 传球游戏 tyvj1008(动态规划)