【leetcode】powx-n
2014-08-22 21:51
405 查看
//二分 //注意特殊的情况,x=0,1,-1;n=0 //!!特殊的n=-2147483648,-n越界 #include <iostream> using namespace std; class Solution { public: double pow(double x, int n) { if(x==1 || x==0){ return x; } if(x == -1){ if(n%2 == 0){ return 1; } else { return -1; } } if(n == 0){ return 1; } if(n < 0){ return 1.0/pow(x,-n); } if(n % 2 == 0){ double temp = pow(x,n/2); return temp * temp; } return x * pow(x,n-1); } }; int main() { int n = -3; double x = 34.00515; Solution A; cout << A.pow(x,n) << endl; return 0; }
添加x=1,-1特殊情况,是因为一个测试用例,x=1,n=-2147483648通不过,但治标不治本,需要特殊处理下n为int范围里最小值的情况;
int范围为-2^31~2^31-1,即-2147483648~2147483647
修改后代码:
class Solution { public: double pow(double x, int n) { if(n == -2147483648){ return 1.0/(x*pow(x,-n-1)); } if(n == 0){ return 1; } if(n < 0){ return 1.0/pow(x,-n); } if(n % 2 == 0){ double temp = pow(x,n/2); return temp * temp; } return x * pow(x,n-1); } };
相关文章推荐
- LeetCode(50) Pow(x,n)
- leetcode------Implement pow(x, n).
- LeetCode-Pow(x, n)
- LeetCode 050 Pow(x, n)
- [LeetCode] 数学计算模拟类问题:加法,除法和幂,注意越界问题。题 剑指Offer,Pow(x, n) ,Divide Two Integers
- Leetcode--Pow(x,n)
- [leetcode Q50] Pow(x, n)
- LeetCode 之 Pow(x, n)(分治法)
- [LeetCode] Pow(x, n)
- leetcode解题方案--050--pow(x,n)
- Leetcode|Pow(x,n)
- LeetCode – Refresh – Pow(x, n)
- LeetCode 49 Pow(x, n)
- leetcode 050 Pow(x, n)
- [Leetcode] #50 Pow(x, n)
- 82_leetcode_pow(x, n)
- leetcode 50 Implement Pow(x, n)
- 【leetcode】Pow(x, n)
- leetcode || 50、Pow(x, n)
- [LeetCode] Pow(x, n) 二分搜索