最大和最小总和
回答
它看起来像您有溢出的问题。在32位系统和Windows 64位上,long类型的最大值为2,147,483,647(请参阅this reference)。将您输入的所有值加起来为3,001,208,382。我可以通过将long
更改为int
(因此导致溢出尝试将数字存储为32位值)而在我的Mac上重现您的错误(min
为负)。尝试改变
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
。
甚至在使用double而不是long之后,最小总和为负 –
使用long long int
或unsigned long long int
他们有更高的范围:
long long int:
-9,223,372,036,854,775,807 9,223,372,036,854,775,807
unsigned long long int:
0到18,446,744,073,709,551,615
我想在代码中有一些逻辑错误,我无法找到。 –
- 你的代码是一致的方式是丑陋和错误俯卧。
- 那些没有括号的
for
令人困惑。 - 这可能不是onverflow。 (
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。
非常感谢你。我会努力改进。 –
它看起来像OP使用Windows比其他64位系统具有更小的“长”。 – nalyd88
- 1. 最小/最大 “总和” 的
- 2. 最小和最大
- 3. 最大和最小
- 4. 最大大小总和为n
- 5. 最大化总和
- 6. oracle SQL:通过最小和最大总和获得DEPT
- 7. 如何计算最小值,最大值,总和,和AVG
- 8. 最大和最小的INT
- 9. 最小和最大验证
- 10. 最大值和最小值?
- 11. 消除最小和最大
- 12. 最大和最小; heapq python
- 13. Java - 最小和最大值
- 14. 最大和最小差异
- 15. 最小和最大绑定
- 16. 最小和最大的
- 17. 最大和最小日期
- 18. 最大和最小MongoDB中
- 19. 寻找最小和最大
- 20. 交换最大和最小
- 21. 最小和最大日期
- 22. Haskell的性能时最小/最大/总和在大列表
- 23. 扩大产品的总和产品的最小总和
- 24. 最小和最大按钮和标签
- 25. 最小的成本总和
- 26. 最大总和子列表?
- 27. 最大路径总和
- 28. 子阵最大总和
- 29. SQL中的最大总和
- 30. 树中最大的总和
如果你把代码和输出放到问题中,那将是最好的。然后人们可以复制/粘贴代码并查看它。 – nalyd88
请在原始问题中粘贴格式化的代码。 – DyZ
你也应该处理你的代码对齐。我敢肯定,由于可怕的代码对齐,你错过了一些错误。 –