数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
思路
方法一: 正数直接累乘exp次就好了,负数取倒数累乘-exp次
public double Power(double base, int exp) {
if(exp == 0) return 1.0;
if(exp<0){
base = 1/base;
exp = -exp;
}
double result = 1.0;
for(int i=0;i<exp;i++){
result*=base;
}
return result;
}
方法二:快速幂,也就是9的5次幂可分解为 81819,再用递归方式处理
public double Power(double base, int exp) {
if(exp < 0){ //负指数转为正指数
base = 1/base;
exp = -exp;
}
return power(base,exp);
}
public double power(double base, int exp){
if(exp == 0) return 1.0;
double result;
result = Power(base,exp/2); //先求出n/2次幂的结果
if((exp&1) == 1){ //奇数的判别
return result * result * base;
}else return result * result;
}
总结
1、快速幂:8次幂不需要累乘8次, 计算出4次幂的结果,再平方就好了
2、判断一个数是否为奇数,直接&1 就好了