因此,此代码应该找到一个已排序的正数组的minimum_summaximum_sum([arr_elemnts-1]个数字的和)值(示例arr=[5,4,3,2,1]给出min_sum=1+2+3+4=10 max_sum=5+4+3+2=14)

它在大多数情况下都工作得很好,但是当我输入数组的元素为140537896 243908675 670291834 923018467 520718469而不是返回min=1575456874 max=2357937445时,它返回min=1575456874 max=-1937029851(我是初学者,知道我做错了什么吗?)

#include <stdio.h>

int sort(int n, long int arr[n])
{
    int aux;

    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < n - 1; j++)
        {
            if (arr[j + 1] < arr[j])
            {
                aux = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = aux;
            }
        }
    }
    return 0;
}

void sum(int n, long int arr[n])
{
    long int min_sum = 0;
    long int max_sum = 0;
    for (int i = 0; i < n - 1; i++)
    {
        min_sum = min_sum + arr[i];
    }
    printf("min sum is : %ld \n", min_sum);
    for (int i = n - 1; i > 0; i--)
    {
        max_sum = max_sum + arr[i];
    }
    printf("max sum is : %ld",max_sum);
}

int main()
{
    int n;
    printf("----MIN MAX---- \n");
    do {
        printf("Enter n : ");
        scanf("%d", &n);
    } while (n <= 0);
    long int arr[n];
    for (int i = 0; i < n; i++)
    {
        printf("Enter arr[%d]: ", i);
        scanf("%ld", &arr[i]);
    }
    sort(n, arr);
    sum(n, arr);
}

推荐答案

通常,长整型被限制为32位(最大2,147,483,647).

您也许可以try 一个长的长整型,它是64位(最大为9,223,372,036,854,775,807).

我对c不是很熟悉,但为了解释为什么大数字的和会是负数,有可能在将它们相加时,一些位被忽略或替换,变成负数.您可以try 将1与32位的2,147,483,647相加,看看会发生什么情况.

Integer overflow on wikipedia

C++相关问答推荐

Mbed TLS:OAEP的就地en—/decryption似乎不起作用'

GCC:try 使用—WError或—pedantic using pragmas

什么C代码将确定打开的套接字正在使用的网络适配器?

在32位处理器上优化53—32位模计算>

GCC预处理宏和#杂注GCC展开

当execvp在C函数中失败时杀死子进程

在循环中复制与删除相同条件代码的性能

如何在下面的C代码中正确管理内存?

如何在C++中处理按键

C中的FREE函数正在触发断点

循环中的静态变量与块中的变量和循环

安全倒计时循环

C++中PUTS函数的返回值

计算SIZE_MAX元素的长数组的大小

为什么我在我的代码中得到错误和退出代码-1073741819(0xC0000005),但如果我添加了一个不相关的打印语句,它仍然有效?

Linux Posix消息队列

既然我们在 if 中将 int 的值更改为 10,为什么在第二个 fork 后,子进程及其创建的子进程都会打印 33 ?

为什么 int32_t 和 int16_t 在 printf 输出中具有相同的位数?

为什么写入关闭管道会返回成功

当循环变量在溢出时未定义时,可以进行哪些优化?