到达某个Nth 的三角数具有已知的汇总收敛
( 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);
}
Run Code Online (Sandbox Code Playgroud)
得到:
Num: 10 Solution: 55
Run Code Online (Sandbox Code Playgroud)
如果我将数字增加到 100000
int n = 100000;
long solution = (n * (n + 1)) / 2;
System.out.println("Num: " + n + " Solution: " + solution);
Run Code Online (Sandbox Code Playgroud)
得到:
Num: 100000 Solution: 705082704
Run Code Online (Sandbox Code Playgroud)
实际上应该是:
Num: 100000 Solution: 5000050000
Run Code Online (Sandbox Code Playgroud)
将乘法更改为:
long solution = n;
solution = (solution * (n+1))/2;
System.out.println("Num: " + n + " Solution: " + solution);
Run Code Online (Sandbox Code Playgroud)
似乎要解决它,但为什么不long solution = (n * (n + 1)) / 2;这样做呢?
你正在执行int算术,它在转换为a之前会溢出long.正如您所指出的那样,首先使用longfor n强制long算术.数学完成后,值将被提升为long,此处不会发生溢出.
使用intfor时n,数学int在结果转换为long赋值之前执行为s .
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |