您的位置:首页 > 其它

牛客网刷题之数值的整数次方

2016-10-08 21:58 176 查看

题目描述:



解题思路:

  其实,题目本身是没有难度的,只不过是要考虑周全,并在普通解法上进行优化就行了。分别考虑expont大于零以及小于零时,还有expont为零以及base为零的情况,加上条件语句就可以写好普通解法:

  

public double Power(double base, int exponent) throws Exception {
double result = 1;
if(base == 0){
throw new Exception("底数不能为0");
}
else if(exponent == 0){
return 1;
}
else if(exponent > 0){
for(int i =1 ; i <= exponent ; i ++){
result *= base;
}
return result;
}else{
for(int i = 1 ; i <= (-exponent) ; i ++){
result *= base;
}
return 1/result;
}
}




这种强解法的复杂度是O(n)的,当然还有稍微好一点的解法:

当n为偶数时 base^n = base^(n/2) * base^(n/2)

当n为偶数时 base^n = base^(n/2) * base^(n/2) *base,这样的话就可以递归求出(n/2)时的大小,最后只只需要判断传入的expont的奇偶行再进行一步运算就可以了。这样的话,复杂度就是O(logn)了。

题解:

public double Power(double base, int exponent) throws Exception {
double result = 1;
if(base == 0){
throw new Exception("底数不能为0");
}
else if(exponent == 0){
return 1;
}
int n = exponent > 0 ? exponent : (-exponent);
result = Power(base, n >> 1);
result *= result;
if((n &0x1) == 1){
result *= base;
}
return exponent > 0 ? result : 1/result;
}


ac结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: