問題描述
實現函數double Power(double base, int exponent),求base的exponent次方。不得使用庫函數,同時不需要考慮大數問題。
解題報告
求解時:
如果n
是奇數,則
如果n
是偶數,則
一直這樣迭代下去。
這樣做的原因是減少乘法的計算次數。
因爲 n
可正可負,所以當n爲負數時,將其取反,但是因爲32位有符號整數的取值範圍是[]
所以當n
取值 -2147483648
[32位有符號整數的最小數]時,需要單獨進行處理。
實現代碼
class Solution {
public:
double myPow(double x, int n) {
double ans;
bool flag=true;
if(n==0) return 1.0;
if(n==-2147483648){
ans=myPow(x, 1073741824);
return 1.0/(ans*ans);
}
if(n<0){
flag=false;
n=-n;
}
if(n%2==0){
ans=myPow(x,n/2);
return flag?ans*ans:1.0/(ans*ans);
}
else{
ans= myPow(x,n/2);
return flag?ans*ans*x:1.0/(ans*ans*x);
}
}
};