在c中输入大号

taking input of large no in c

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

如果我们对除 1 之外的所有值求和,我们的总和为 。 2+3+4+5;

和其他一样

如您所见,最小总和为min,最大总和为max。因此,我们在新行上将这些最小和最大总和打印为两个 space 分隔的整数。

提示:小心整数溢出!使用 64 位整数。

这是我的问题,但它未能测试某些值....我认为这是数据类型问题,但我已经花了最长的时间,我不能

此输入失败: 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 而不是 int。要摆脱这些愚蠢的错误,您可以使用这种简单的方法 -

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

在这里您不必担心指向的内容的类型。没有你明确提及就确定了。

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

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);

您想创建一个 long long unsigned int 的数组,但您只分配了 space 对于 n ints。正确的 malloc 调用是

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

至于另一个错误,coderredoc的回答告诉你更多关于这些的信息,这里没有必要重复它们。