首页 > 解决方案 > 长长整数溢出

问题描述

下面是我添加向量 arr 的 4 个元素然后打印最小和和最大和的代码。下面是我的代码。尽管在使用 unsigned long long 之后,准确地说,其范围是0 到 18,446,744,073,709,551,615当测试用例为256741038 623958417 467905213 714532089 938071625时,我得到一个整数溢出答案。据我所知,答案应该在 ull 的范围内。请帮助我更好地了解原因。

void miniMaxSum(vector<int> arr) {
vector<int> A;
for(int i=0;i<5;i++){
    unsigned long long int ans=0;
    for(int j=0;j<5;j++){
        if(i==j)    continue;
        else    ans+=arr[j];
    }
    A.push_back(ans);
}
sort(A.begin(), A.end());
cout<<A[0]<<" "<<A[4];
}

标签: c++overflow

解决方案


vector<int> A;是整数向量。当您A.push_back(ans);,ans转换为int时,会导致溢出。

只需更改声明A即可vector<unsigned long long int> A;解决问题


推荐阅读