c++ - 为什么 std::accumulate 生成 705032704 作为输出而不是向量中元素的总和?
问题描述
输出是 705032704 而不是 5000000000。这是为什么呢?我认为std::accumulate
会计算向量中元素的总和。
#include <vector>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <string>
#include <iterator>
#include <queue>
#include <stack>
#include <numeric>
typedef long long ll;
int main()
{
std::vector<ll> nums = {1000000000, 1000000000,1000000000,1000000000,1000000000};
std::cout << std::accumulate(nums.begin(), nums.end(), 0);
std::cin.ignore();
}
解决方案
整数溢出。
std::accumulate
从第三个参数的类型推断求和变量的类型。由于您传入一个整数,因此 的结果std::accumulate
也将是一个整数。
改为传递long long
文字(来自 C++11):
std::accumulate(nums.begin(), nums.end(), 0LL);
推荐阅读
- javascript - 等待 useEffect 完成,然后访问对象属性
- python - 在 seaborn 图下方添加一个表格
- php - 如何在 Laravel 7 中使用固定选项填充多选
- django-rest-framework - {“详细信息”:“未找到。” }
- vagrant - Nifi:无法从 './data/flow.xml.gz.new.xml.gz' 重命名为 './data/flow.xml.gz'
- r - R包“robCompositions”安装问题
- docker - Docker Swarm - 请求无法到达不同节点上的服务
- postgresql - 月间隔 Postgres
- c++ - Aws C++ SDK 最小安装
- php - PHP多数组合并JSON