🍞环境:牛客的编译环境
🍰语言: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);
}
网友评论