【发布时间】:2021-10-03 12:43:52
【问题描述】:
- 编写一个程序,读取并存储一系列整数,然后计算前 N 个整数的总和。先求N,再读 将值转换为向量,然后计算前 N 的总和 价值观。例如:“请输入您想要的值的数量 sum:” 3 “请输入一些整数(按'|'停止):” 12 23 13 24 15 | “前 3 个数字的总和 (12 23 13) 是 48。”处理所有 输入。例如,如果用户确保给出错误消息 要求比向量中更多的数字的总和。
- 修改练习 8 中的程序,如果结果不能表示为 int,则写出错误。
所以在练习 9 中,如果结果不能表示为 int,它会写出一条错误消息,但是如果我在这里只是将整数相加,那么我在这里唯一能想到的会导致数字不如果有一些整数溢出并且整数高于 INT_MAX 或低于 INT_MIN ,则能够表示为 int ,但我该如何准确检测到呢?
这是我的代码:
#include<vector>
#include<cmath>
#include<string>
#include<iostream>
#include<algorithm>
#include<stdexcept>
using namespace std;
int main()
{
int N = 0;
vector<int> values;
cout << "Please enter the number of values you want to sum." << '\n';
cin >> N;
cout << "Please enter some numbers" << '\n';
for (int tempnum; cin >> tempnum; )
{
values.push_back(tempnum);
}
if (N > values.size())
{
cout << "How am I gonna add up more numbers than you gave me?" << '\n';
}
else
{
int total = 0;
for (int i = 0; i < N; i++)
{
total += values[i];
}
}
}
但我不能只检查总计是否高于或低于 INT_MAX 或 INT_MIN,因为 INT_MAX +1 或某些东西会返回一些随机负值,所以我不太确定该怎么做
【问题讨论】:
-
请注意,问题是
integers而不是int。所以你不限于在计算中使用int。如果在您的系统上long大于int,您可以使用它并根据最大可能的int检查每次添加的结果。 -
但是在练习 10 的练习 9 之后,它说: 10. 修改练习 8 中的程序,使用 double 而不是 int。此外,制作一个包含相邻值之间 N-1 个差异的双精度向量,并写出该差异向量。我假设这基本上意味着我必须在 8 和 9 中使用整数。
标签: c++