我试图编写这个问题的解决方案,即“计算从 到(给定)n 的所有整数的总和”
我最初的代码如下,我相信它工作得很好
#include <bits/stdc++.h>
using namespace std;
int main () {
int n;
cin >> n;
long long sum = 0;
for(int i = 1; i <= n; i++) {
sum += i;
}
cout << sum << endl;
return 0;
}
然而,突然有一种冲动想要制作一个“替代”代码,并且基本上不使用循环来完成它。 众所周知,数学中有一个1到n之和的公式,那就是:
sum(1, n) = ((n) * (n + 1)) / 2
,对吧?
所以我们的想法是简单地使用这个公式。
虽然它对于小数字(例如 1000)工作正常,但当我输入相对较大的数字(例如 1000000)时,会出现错误(?)。
所以就像 1000000 一样,答案应该是 500,000,500,000,而通过第二个代码,输出将是 -363189984,这很奇怪,对吧?
long long
,不够大,无法容纳一些数字,因此它们“崩溃”或不管它叫什么。
然而,在这种情况下,我不认为这都是因为长时间无法保存像 500,000,500,000 这样的数字,而是因为将这些数字相乘的操作(1000000 和 1000000+1),这导致这场灾难的发生,因此产生了狡猾的输出。所以我的问题是, 首先,我的说法正确吗?如果不是,这段代码的实际问题是什么? 其次,我该如何解决这个问题(比如我是否需要使用更大的变量,或者只是这段代码根本不“高效”)