[C++] LeetCode 50. Pow(x, n)
2018-04-01 11:16
447 查看
题目
实现 pow(x, n)。示例 1:
输入: 2.00000, 10 输出: 1024.00000 |
---|
输入: 2.10000, 3 输出: 9.26100 |
---|
解析
这个题目有较多细节需要注意,容易导致错误。1、n可能为负值,此时需要考虑取绝对值
2、由于n为有符号整型变量,范围为-2147483648~2147483647,取最小值时,如果取绝对值会导致溢出。
具体解法有两种较好的
方法一
利用二进制方法,将n用二进制展开,例如求2525,其中5=101(2)=1∗22+0∗21+1∗205=101(2)=1∗22+0∗21+1∗20,故25=21∗22+0∗21+1∗20=51∗22∗50∗21∗51∗2025=21∗22+0∗21+1∗20<b765
/msup>=51∗22∗50∗21∗51∗20
从上述例子可以看出,可以把n写成二进制,对应位为1时,则乘以当前值,否则不乘;
具体代码如下:
class Solution { public: double myPow(double x, int n) { double ans=x,res=1.0; long long m=n; m=abs(m); while(m>0){ if(m&1==1) res*=ans; m=m>>1; ans*=ans; } if(n>0) return res; else return 1.0/res; } };
方法二 分治法
代码class Solution { public: double getRes(double x,long long n){ if(n==0) return 1; else if(n==1) return x; if(n%2==0) { double tmp= getRes(x,n/2); return tmp*tmp; } else return getRes(x,n-1)*x; } double myPow(double x, int n) { long long m=n; m=abs(m); double res=getRes(x,m); if(n>0) return res; else return 1.0/res; } };
相关文章推荐
- leetcode之349. Intersection of Two Arrays (C++解法 哈希表和vector)
- LeetCode 349. Intersection of Two Arrays 题解(C++)
- LeetCode刷题(C++)——Count and Say(Easy )
- leetcode_c++:链表:Insertion Sort List(147)
- 【LeetCode】【C++】Linked list cycle 2
- Leetcode_maximum-depth-of-binary-tree (updated c++ and python version)
- leetcode_c++:链表:Palindrome Linked List(234)
- 第三周:( LeetCode200 ) Number of Islands(c++)
- Leetcode_binary-tree-zigzag-level-order-traversal (updated c++ and python version)
- 【leetcode c++】Reverse Integer
- leetcode_c++:Count and Say(038)
- LeetCode 617. Merge Two Binary Trees (C++)
- LeetCode - 217. Contains Duplicate - 思路详解 - C++
- LeetCode 171. Excel Sheet Column Number 题解(C++)
- [leetcode-229]Majority Element II(c++)
- leetcode 220. Contains Duplicate III TreeSet和SortedSet的应用 + C++的lower_bound的应用 + 移动窗口
- 【leetcode c++】08 String to Integer (atoi)
- leetcode Valid Palindrome C++&python 题解
- 关于leetcode中c++ STL 的几道题
- Leetcode_unique-paths (updated c++ and python version)