我写了一个代码来查找最大和最小总和,可以用c ++中的五个数字中的四个数字来计算
但它不会在较大的值上生成所需的输出,例如输入我给出并输出我得到了吗?
答案 0 :(得分:1)
看起来你有溢出问题。在32位系统和Windows 64位上,long类型的最大值为2,147,483,647(参见this reference)。将您输入的所有值相加得出3,001,208,382。通过将min
更改为long
,我可以在Mac上重现您的错误(int
为否定)(从而导致溢出尝试将数字存储为32位值)。尝试更改
long a[5], max=0, min=10000, sum;
到
long long a[5], max=0, min=10000, sum; // long long is 64bit on Win
并查看是否获得非负值。由于您的算法中没有减法,并且您只输入了正值,因此将sum
设为负数的唯一方法就是溢出。
此外,您输入的数字sum
将永远不会少于10000
。我建议不同地初始化你的最小值和最大值。也许,在第一次内循环迭代后将min
和max
设置为sum
。
答案 1 :(得分:0)
使用long long int
或unsigned long long int
他们有更高的范围:
long long int:
-9,223,372,036,854,775,807 to 9,223,372,036,854,775,807
unsigned long long int:
0至18,446,744,073,709,551,615
答案 2 :(得分:0)
for
令人困惑。long
在我的机器上工作) 您要做的是在输入中读取五个值并输出min
,max
和sum
。有几种方法可以做到这一点。
其中一种方法是在您阅读时检查值是小于还是大于当前min/max
,然后将其添加到sum
。您需要检查是否将它们与当前min/max
进行比较,而不是sum
。
if(a[i] > max)
max = a[i];
else if (a[i] < min)
min = a[i];
sum += a[i];
另一种(更好)的方法是使用std::valarray并使用它提供的方法来检索您需要的内容。
我的建议是从更好的source开始学习cpp。