如何解决使用长参数来使用BigInteger的重构函数
我需要转换一些使用long
参数的方法,结果证明64位long
太小,无法满足我的需要,我所做的就是转换这些方法,以便可以使用{{ 1}}。
这是可复制的示例:
原文:
BigInteger
已转换:
static void ConditionalSum_1(long n) {
long soma = 0;
int i = 1;
while (i < n) {
for (int j = 0; j < i; j++) {
soma++;
}
i *= 2;
}
System.out.println("Soma C1 = " + soma);
}
函数调用:
static void ConditionalSum_2(BigInteger n) {
BigInteger soma = BigInteger.ZERO;
BigInteger i = BigInteger.ONE;
while (i.compareTo(n) < 0) {
for (BigInteger j = BigInteger.ZERO; j.compareTo(i) < 0; j.add(BigInteger.ONE)) {
soma.add(BigInteger.ONE);
}
i.multiply(BigInteger.TWO);
}
System.out.println("Soma C2 = " + soma);
}
由于某些原因,我无法查明public static void main(String[] args) {
ConditionalSum_1(999999L); //works fine
ConditionalSum_2(new BigInteger("999999")); //infinite loop
}
函数似乎不起作用,没有抛出异常,变量似乎没有变化,因此例程进入了无限循环
我是Java的新手,所以我确定这里缺少一些基本知识。帮助将不胜枚举。
解决方法
当您将一个BigInteger与另一个BigInteger求和时,结果将返回。因此,您必须再次将返回值分配给适当的变量。
for (BigInteger j = BigInteger.ZERO; j.compareTo(i) < 0; j = j.add(BigInteger.ONE))
{
soma = soma.add(BigInteger.ONE);
}
i = i.multiply(BigInteger.TWO);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。