大数计算幂,如计算30300
1.使用常规的Math.pow(30,300), 由于该方法使用的double,会导致数据误差
2.BigInteger.pow()
3.快速幂,利用分治思想,降低复杂度为log(n):
举例: 如计算211
指数 11的二进制表达式为1011.
因此,可以有如下计算:
private long fastPow(long base, long exponent) {
// 初始化结果
long result = 1;
// 直达指数为0
while ( exponent > 0) {
// 判断当前最低位,仅当前位是1的需要计算
if ((exponent & 1) == 1) {
// 结果乘以 当前的底数
result *= base;
}
// 计算下一位的底数
base *= base;
// 右移, 不断修改最低位
exponent >>= 1;
}
return result;
}