垃圾价值通过,同时总结一系列长整数

Garbage value being passed while Summing up Array of Long Long integers

本文关键字:一系列 长整数      更新时间:2023-10-16

我正在学习在C 中编码。我遇到了一个问题,该问题需要制定功能来加起来很大并返回总和。我看到一种神秘的行为。当返回值之前,当我在函数aVeryBigSum中打印数字veryBigSum时,它可以正常工作。

#include <bits/stdc++.h>
#include <vector>
using namespace std;
long long aVeryBigSum(int n, vector <long long> ar) {
    long long veryBigSum;
    for(vector<long long>::iterator it = ar.begin(); it != ar.end(); ++it )
        veryBigSum += *it;
    cout << veryBigSum << "n"; 
    return veryBigSum;
}
int main() {
    int n;
    cin >> n;
    vector<long long> ar(n);
    for(int ar_i = 0; ar_i < n; ar_i++){
        cin >> ar[ar_i];
    }
    long long result = aVeryBigSum(n, ar);
    cout << result << endl;
    return 0;
}

上述输入是:

5
1000000001 1000000002 1000000003 1000000004 1000000005

上述输出是:

5000000015
5000000015

但是,当我不打印aVeryBigSum函数中的数字时,main中的cout语句显示一些垃圾值。

#include <bits/stdc++.h>
#include <vector>
using namespace std;
long long aVeryBigSum(int n, vector <long long> ar) {
    long long veryBigSum;
    for(vector<long long>::iterator it = ar.begin(); it != ar.end(); ++it )
        veryBigSum += *it;
    return veryBigSum;
}
int main() {
    int n;
    cin >> n;
    vector<long long> ar(n);
    for(int ar_i = 0; ar_i < n; ar_i++){
        cin >> ar[ar_i];
    }
    long long result = aVeryBigSum(n, ar);
    cout << result << endl;
    return 0;
}

上述输入是:

5
1000000001 1000000002 1000000003 1000000004 1000000005

上述输出是:

5004197743

有人可以向我解释为什么会发生这种情况?我的意思是,打印值如何影响变量到功能之间的传递?

您需要初始化累加器:

long long veryBigSum = 0;

您有时会得到正确的答案。