gpt4 book ai didi

java - 如何使用 biginteger 对两个边界之间的数字求和

转载 作者:行者123 更新时间:2023-12-01 06:42:05 25 4
gpt4 key购买 nike

我正在尝试将两个给定数字之间除边界之外的所有数字相加。 addNumbers("5", "8") 应返回 13,因为 6+7=13。这是我目前拥有的功能。

 public static BigInteger addNumbers(String from, String to) {
BigInteger total = new BigInteger("0");
BigInteger startingBoundary = new BigInteger(from);
BigInteger finishingBoundary = new BigInteger(to);

if (startingBoundary.compareTo(finishingBoundary) < 0) {
startingBoundary = new BigInteger(from);
finishingBoundary = new BigInteger(to);
} else {
finishingBoundary = new BigInteger(from);
startingBoundary = new BigInteger(to);
}

while (startingBoundary.compareTo(finishingBoundary) != 0 ) {
System.out.println("Starting boundary:" + startingBoundary.intValue());
System.out.println("Finishing boundary: " + finishingBoundary.intValue());

total.add(startingBoundary);
System.out.println("total: "+total.intValue());

startingBoundary.add(new BigInteger("1"));
}
return total;

}

问题是,尽管我更改了 while 条件的值,但它似乎无限运行。另外,当在每个循环中打印出总对象时,它总是打印出 0。我知道我将其初始化为 0,但我希望它在添加时会发生变化..

最佳答案

请注意,使用 BigInteger 意味着数字以及两个数字之间的差异可能巨大。从字面上看,从下边界到上边界循环可能需要年龄。相反,您可以使用闭合形式 sum(1..N) = (N*(N+1))/2 的变体。用它对从 1upper 和从 1lower 的数字求和,然后将两者结合起来得到您想要的结果。

BigInteger lower = new BigInteger("5");
BigInteger upper = new BigInteger("8");
BigInteger one = BigInteger.ONE, two = BigInteger.TWO;

BigInteger oneToUpper = upper.multiply(upper.add(one)).divide(two);
BigInteger oneToLower = lower.multiply(lower.add(one)).divide(two);

BigInteger lowertoUpperInc = oneToUpper.subtract(oneToLower).add(lower);
System.out.println(lowertoUpperInc); // 5 + 6 + 7 + 8 = 26

BigInteger lowertoUpperExc = oneToUpper.subtract(oneToLower).subtract(upper);
System.out.println(lowertoUpperExc); // 6 + 7 = 13

(请注意,对于此示例,您的循环似乎还返回 18,这似乎是 5+6+7,因此不是您真正想要的。)

除了循环之外,这也适用于真正 BigInteger,例如lower = 123456789123456789upper = 987654321987654321 的总和(包括和排除)分别为 48010974048010974007544581507544581548010974分别为0480109738964334703964334705

关于java - 如何使用 biginteger 对两个边界之间的数字求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57856469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com