题目:
实现 pow(x,n)
样例:
Pow(2.1, 3) = 9.261
Pow(0, 1) = 0
Pow(1, 0) = 1
思路:
分治思想。
对于n是奇数时,$x^n = x^{n/2}* x^{n/2}* x $
对于n是偶数时,$x^n = x^{n/2}* x^{n/2}$$
参考答案:
class Solution {
public:
/*
* @param x: the base number
* @param n: the power number
* @return: the result
*/
double myPow(double x, int n) {
// write your code here
/* if(n == 0) return 1.00;
if(n < 0){
return 1/myPow(x, -n);
}
else return x*myPow(x, n-1);
}*/
/*2.0 -2147483648就会通过不了,因为 n = Intege.MIN_VALUE,n = -n 会出现溢出
Intege.MIN_VALUE == -2147483648 Intege.MAX_VALUE == 2147483647*/
if(n == 0) return 1.00;
if(n == 1) return x;
//分治思想。 对于n是奇数时,x^n = x^(n/2)* x^(n/2)* x 对于n是偶数时,x^n = x^(n/2)* x^(n/2)
int t = n/2;
if(n < 0){
// return 1/myPow(x, -n);//这样就还存在上面的问题-n溢出
t = -t;
x = 1/x;
}
/*
if(n%2 == 0) return myPow(x, n/2)*myPow(x, n/2);
else return myPow(x, n/2)*myPow(x, n/2)*x;
*/
double res = myPow(x, t);//这样就可以减少后面计算的次数
if(n%2 == 0) return res*res;
else return res*res*x;
}
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。