c++ - 长长整数溢出
问题描述
下面是我添加向量 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];
}
解决方案
vector<int> A;
是整数向量。当您A.push_back(ans);
,ans
转换为int
时,会导致溢出。
只需更改声明A
即可vector<unsigned long long int> A;
解决问题
推荐阅读
- testing - ReferenceError:运行笑话测试时未定义 ReadableStream
- python - 使用熊猫从excel文件中读取特定列
- office-js - Excel Office.js - addFromBase64 - 预览版
- c++ - 矩阵表示为内存中的单个数组和矩阵乘法问题
- aem - 我们可以在 JobManager 中添加 ByteArrayInputStream 吗?
- react-native - 测试执行来自组件的功能确实挂载并且组件将接收道具
- android - 如何在我的应用程序中添加适当的大纲编辑文本?
- angularjs - angularjs主页遇到声明异常
- scala - 依赖于其他 3 个播放应用的播放应用
- spring-boot - 在谷歌云/应用引擎上部署我的 Spring Boot 应用程序后,无法打开 JDBC 连接以执行 DDL\n\tat