题目:
实现pow(x, n),即计算x的n次方(x^n)
Implement pow(x, n), which calculates x raised to the power n (x^n).
Input: 2.00000, 10 Output: 1024.00000 Input: 2.10000, 3 Output: 9.26100 Input: 2.00000, -2 Output: 0.25000 Explanation: 2-2 = 1/22 = 1/4 = 0.25 Note:-100.0 < x < 100.0;n is a 32-bit signed integer, within the range [−2^31, 2^31 − 1]
思路:
需要考虑x为0、正、负数;n为0、正、负数的情况
对x来说:
1) x为负数,则最后的符号由n决定,n为偶数,则x为正数、n为奇数,则x为负数
2) 如果x为0,则无论n为多少,都返回0
对n来说:
1) n为0,如果x不为0,则返回1
2) n小于0,则先对x进行|n|次方,再返回1/x^|n|
※ 方运算使用类似二分法进行加速
代码:
class Solution {
public double myPow(double x, int n) {
if(x==0) {
return 0;
}
// 结果的正负号
double re = 1;
if(x<0 && n%2!=0) {
re = -re;
x = -x;
}
// flag==1 则n为负数 需要最后1/结果
int flag = 0;
if(n<0) {
flag = 1;
n = -n;
}
double powxn = powxn(x, n);
if(flag==1) {
powxn = 1/powxn;
}
return re*powxn;
}
// x>0 && n>0
public double powxn(double x,int n) {
if(n==0) {
return 1;
}
double t = powxn(x, n/2);
if(n%2!=0) {
return x*t*t;
}else {
return t*t;
}
}
}