题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
思路:主要是要注意0的0次方在数学上无意义,同时0的负数次方是非法的。要做好这些情况的处理。
代码(已在牛客网AC):
public class Solution {
//设置全局变量以标识出无意义的情况
boolean valid = true;
public double Power(double base, int exponent) {
if(base == 0.0 && exponent <= 0)
{
//此时无意义
valid = false;
return 0.0;
}
double result = 1.0;
if(exponent > 0)
result = power(base, exponent);
else{
result = 1/power(base, -exponent);
}
return result;
}
private double power(double base, int exponent){
double result = 1.0;
for(int i = 0 ; i < exponent; i++)
result*=base;
return result;
}
}
改进:power函数计算base的整数次方的效率可以通过利用平方计算进行提升。改进后的power函数如下:
private double power(double base, int exponent){
if(exponent == 0)
return 1.0;
if(exponent == 1)
return base;
double result = power(base, exponent >>1);
result*=result;
if((exponent & 0x1)== 1)
result*=base;
return result;
}