??環境:牛客的編譯環境
??語言:JavaScript
??難點:沒有考慮到底數為0,指數為負數和正數的不同情況。
??題目:給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。
??解題思路:我自己的方法比較簡單,直接利用循環去處理的。
??代碼:
function Power(base, exponent)
{
// write code here
if(base == 0)
return 0;
var result = 1;
if(exponent == 0)
return 1;
else if(exponent > 0){
for(let i = 0; i < exponent; i++){
result *= base;
}
}
else if(exponent < 0){
for(let i = exponent; i < 0; i++){
result *= (1 / base);
}
}
return result;
}
后來看了討論里面,其他朋友用位移運算做的處理,感覺很棒,最近做題經常會用到位移思想,我覺得這個想法很別致。而且這里面也找了數學規律,我自己用筆演算了一遍,規律暫且想的不是很明白,我還得再想想。
public double Power(double base, int n) {
double res = 1,curr = base;
int exponent;
if(n>0){
exponent = n;
}else if(n<0){
if(base==0)
throw new RuntimeException("分母不能為0");
exponent = -n;
}else{// n==0
return 1;// 0的0次方
}
while(exponent!=0){
if((exponent&1)==1)
res*=curr;
curr*=curr;// 翻倍
exponent>>=1;// 右移一位
}
return n>=0?res:(1/res);
}