求一个数值的整数次幂(power)
2019-04-30 本文已影响0人
霍运浩
1. 求解思路:
需要判断幂值的情况
M=0:底数为任意值,结果为1;
M<0:底数不能为0,否则为无效输入;结果为倒数
M>0:底数为任意值
利用指数的二进制表示方法,使用&1和>>1逐位读取指数的二进制数据n,当n&1==1时,将该位所代表的乘数累乘到最终结果中。
原理:如10^1101 = 100001100100101000,代表1013
2. 代码实现
public class PowerTest {
public static double powerT(double base, int exponent){
double result=1,curr=base;
int n;
if (exponent>0) {//指数>0,则将指数值赋给n,保留原来指数值,再最后判断是返回结果原值,还是结果倒数
n=exponent;
}else if (exponent<0) {//指数<0,分母是不能为0的
if (base==0) {
throw new RuntimeException("分母不能为0");
}
n=-exponent;//使其变为正数
}else {//指数==0
return 1;
}
while (n!=0) {
if ((n&1)==1) //指数的二进制数最后一位与1相与,看是否在该位置有值
result*=curr;
curr*=curr;//加倍
n>>=1;//右移
}
return exponent<=0?1/result:result;
}
public static void main(String[] args) {
// 1:0001
// 2:0010
// 3:0011
// 4:0100
// 5:0101
//6: 0110
System.out.println(powerT(11, 13));
System.out.println(6 >> 1);
System.out.println(5&1);
}
}