在c语言中输入大量no

在c语言中输入大量no,c,long-integer,C,Long Integer,我们的初始数字是1、2、3、4和5。我们可以使用五个整数中的四个来计算以下总和: 如果我们把除1之外的所有东西加起来,我们的和就是。2+3+4+5; 和其他人一样 如您所见,最小和是最小的,最大和是最大的。因此,我们将这些最小和最大和作为两个空间分隔的整数打印在新行上 提示:注意整数溢出!使用64位整数 这是我的问题,但它未能测试某些值……我认为这是数据类型ISUT,但我已尽可能长时间地拒绝 此输入失败: 769082435 210437958 673982045 375809214 38056

我们的初始数字是1、2、3、4和5。我们可以使用五个整数中的四个来计算以下总和:

如果我们把除1之外的所有东西加起来,我们的和就是。2+3+4+5;

和其他人一样

如您所见,最小和是最小的,最大和是最大的。因此,我们将这些最小和最大和作为两个空间分隔的整数打印在新行上

提示:注意整数溢出!使用64位整数

这是我的问题,但它未能测试某些值……我认为这是数据类型ISUT,但我已尽可能长时间地拒绝

此输入失败: 769082435 210437958 673982045 375809214 380564127

帮帮我

int main()
{
     int n=5;
    long long  unsigned int *arr = malloc(sizeof(int) * n);

       long long  unsigned int ar[n],min=0,max=0,sum=0;


    for(int i=0;i<n;i++)
    {
    scanf("%lld",&arr[i]);
    }


    for(int i=0;i<n;i++)
    {
        sum= arr[i]+sum;
    }

    for(int i=0;i<n;i++)
    {

    ar[i] = sum -arr[i];

    }




    for(int i=0; i<n ;i++)
    {
            min=ar[0];

        if(min> ar[i])
           min =ar[i];

    }

     for(int i=0; i<n ;i++)
    {
            max=ar[0];

        if(max< ar[i])
           max =ar[i];

    }

    printf("%lld %lld",min,max);
    return 0;
}

您需要为适当类型的变量分配内存,即unsigned long long not int。要消除这些愚蠢的错误,您可以使用以下简单方法-

long long  unsigned int *arr = malloc(sizeof *arr * n);
在这里,您不必担心被指向的对象的类型。它是在你没有明确提及的情况下确定的

在for循环中,您一次又一次地将min设置为ar[0]。这是不对的。在进入循环之前只做一次。max变量也是如此。对于max变量,for循环也是类似的

unsigned long long min =ar[0];
for(int i=0; i<n ;i++)
{
    if(min > ar[i])
       min = ar[i];
}

您分配了错误的字节数:

long long  unsigned int *arr = malloc(sizeof(int) * n);
您想创建一个长无符号int数组,但只分配 n整数的空间。正确的malloc调用应该是

long long  unsigned int *arr = malloc(n * sizeof *arr);
至于另一个错误,我们的答案告诉您更多关于这些错误的信息,在这里重复它们是没有意义的。

long long unsigned int*arr=mallocsizeofint*n;这没有分配足够的内存