class Solution {
public double myPow(double x, int n) {
boolean tag = false;
double result = 1;
if (n == 0){
return 1d;
}
if (n < 0){
tag = true;
n = -n;
}
for (int i = n; i != 0; i /= 2) {
if (i % 2 != 0){
result *= x;
}
x *= x;
}
if (tag){
return 1/result;
}else {
return result;
}
}
}
因爲n可能特別大,所以採用折半計算:
如果n爲偶數,那麼每次循環計算x的平方即可,最後一次循環i=1,result *= x得到結果
如果n爲奇數,那麼先乘一個x,然後n/2爲偶數,過程同上。