2017-08-26 161 views
-6

我已经写了代码,以查找最大和最小金额,可以从四个数字在C++最大和最小总和

code

计算出五个数字,但它不产生期望的输出大数值例如输入我给和输出我得到?

image

+2

如果你把代码和输出放到问题中,那将是最好的。然后人们可以复制/粘贴代码并查看它。 – nalyd88

+3

请在原始问题中粘贴格式化的代码。 – DyZ

+2

你也应该处理你的代码对齐。我敢肯定,由于可怕的代码对齐,你错过了一些错误。 –

回答

1

它看起来像您有溢出的问题。在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。我会建议不同地初始化你的最小和最大值。也许,在第一次内循环迭代之后,设置minmax等于sum

+0

甚至在使用double而不是long之后,最小总和为负 –

0

使用long long intunsigned 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

+0

我想在代码中有一些逻辑错误,我无法找到。 –

0
  1. 你的代码是一致的方式是丑陋和错误俯卧。
  2. 那些没有括号的for令人困惑。
  3. 这可能不是onverflow。 (long是我的机器上工作)ssoguy.png

你想要做的是读取输入和输出min五个值,该maxsum。有几种方法可以做到这一点。

其中一种方法是在读取它们时检查值是小于还是大于当前值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。

+0

非常感谢你。我会努力改进。 –

+0

它看起来像OP使用Windows比其他64位系统具有更小的“长”。 – nalyd88