题目:
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
使用位运算来提高计算效率:
如果指数是32,只要计算16次方的平方,16次方是8次方的平方...计算32次方仅需要做5次乘法。
如果指数是奇数,例如33,则先求32次方(5次乘法),再乘以base,一共6次运算。
代码
public class Power1 {
static boolean invalid = false;//用全局变量标记是否出错
public static double power(double base, int exponent) {
invalid=false;
double result = 0;
if(exponent>=0) {
result=powercore(base, exponent);
}
else if (exponent<0) {
if (base==0) {
invalid=true;//0的负数次方不存在
return 0;
}
else {
result = 1/powercore(base,-exponent);
}
}
return result;
}
private static double powercore(double base,int exponent) {
if(exponent==0) {return 1;}
if(exponent==1) {return base;}
double result = powercore(base,exponent>>1);
result*=result;
if ((exponent & 1)==1)
result*=base;
return result;
}
public static void main(String[] args) {
System.out.print(power(2,4));
}
}