最大和最小总和

时间:2017-08-26 05:13:21

标签: c++

我写了一个代码来查找最大和最小总和,可以用c ++中的五个数字中的四个数字来计算

code

但它不会在较大的值上生成所需的输出,例如输入我给出并输出我得到了吗?

image

3 个答案:

答案 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。我建议不同地初始化你的最小值和最大值。也许,在第一次内循环迭代后将minmax设置为sum

答案 1 :(得分:0)

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

  1. 您的代码对齐方式很丑陋且容易出错。
  2. 那些没有括号的for令人困惑。
  3. 可能不是onverflow。 (long在我的机器上工作)ssoguy.png
  4. 您要做的是在输入中读取五个值并输出minmaxsum。有几种方法可以做到这一点。

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