无法使用for循环C ++对整数向量求和

Can't sum a vector of integers using for loop c++

我正在编写一个函数,它将一个整数向量作为输入,并遍历该向量以获得向量中的最大值和最小值,以及总和。参数向量中的最大可能整数是 1000000000。

void miniMaxSum(vector<long> arr) {
    long sum = 0;
    long min = 1000000000;
    long max = 0;
    for (int i = 0; i < arr.size(); i++) {
        cout << arr[i] << endl;
        sum += arr[i];
        if (arr[i] < min) {
            min = arr[i];
        }
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    cout << sum << endl;
}

使用以下输入向量作为参数:

vector<long> x = {793810624,895642170,685903712,623789054,468592370 };

总和为负数:-827229366

long 在大多数操作系统(至少 32 位)上通常是 32 位类型。所以它能容纳的最大值是2,147,483,647.

你的数字总和是3,467,737,930。所以溢出了。

考虑使用 unsigned longlong long(至少 64 位)或 unsigned long long 以获得更大的数字。或者您甚至可以使用 intmax_tuintmax_t 来获取支持的最大整数。