在实现K2算法时,用到了阶乘,如果数据量过大,普通阶乘会导致溢出,所以需要用到大整数阶乘。
public class BigIntegerArr {
/**
* 计算进位
*
* @param bit
* 数组
* @param pos
* 用于判断是否是数组的最高位
*/
private void carry(int[] bit, int pos) {
int i, carray = 0;
for (i = 0; i <= pos; i++)// 从0到pos逐位检查是否需要进位
{
bit[i] += carray;// 累加进位
if (bit[i] <= 9) // 小于9不进位
{
carray = 0;
} else if (bit[i] > 9 && i < pos)// 大于9,但不是最高位
{
carray = bit[i] / 10;// 保存进位值
bit[i] = bit[i] % 10;// 得到该位的一位数
} else if (bit[i] > 9 && i >= pos)// 大于9,且是最高位
{
while (bit[i] > 9)// 循环向前进位
{
carray = bit[i] / 10;// 计算进位值
bit[i] = bit[i] % 10;// 当前的第一位数
i++;
bit[i] = carray;// 在下一位保存进位值
}
}
}
}
/**
* 大整数阶乘
*
* @param bigInteger
* 所计算的大整数