Triangular number直到第 N 个已知总和收敛到
(n*(n+1))/2
测试一下:
public static void main(String[] args) {
int n = 10;
long solution = (n * (n + 1)) / 2;
System.out.println("Num: " + n + " Solution: " + solution);
}
给予:
Num: 10 Solution: 55
如果我将数字增加到100000
int n = 100000;
long solution = (n * (n + 1)) / 2;
System.out.println("Num: " + n + " Solution: " + solution);
给予:
Num: 100000 Solution: 705082704
实际上应该是:
Num: 100000 Solution: 5000050000
将乘法更改为:
long solution = n;
solution = (solution * (n+1))/2;
System.out.println("Num: " + n + " Solution: " + solution);
似乎可以解决这个问题,但为什么 long Solution = (n * (n + 1))/2;
无法做到这一点?
最佳答案
您正在执行 int
算术,该算术在转换为 long
之前就溢出了。正如您所指出的,首先使用 long
表示 n
会强制执行 long
算术。数学完成后,值将提升为 long
,这样就不会发生溢出。
当使用 int
表示 n
时,在结果转换为 long< 之前,将以
作业。int
形式执行数学运算
关于java - 创建三角形数的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27868112/