C 在数组中存储10^9大的整数时应使用哪种数据类型?

C 在数组中存储10^9大的整数时应使用哪种数据类型?,c,C,我必须为一个问题编码,在这个问题中,我必须在扫描的所有整数中找到最小整数的频率。我已经声明数组的类型为size\t,在我的机器上大小为8字节,我还尝试使用数据类型unsigned long,但在最终提交代码时,我仍然遇到运行时错误 我已经检查并验证了代码没有问题,因为有3个测试用例通过了给定的输入,但是对于其余的测试用例,代码没有问题,所以请使用用于存储数字的数据类型 请指导我使用正确的数据类型。以下链接中提到了问题: 代码: #包括 #包括 大小a[100001]={0}; int main

我必须为一个问题编码,在这个问题中,我必须在扫描的所有整数中找到最小整数的频率。我已经声明数组的类型为
size\t
,在我的机器上大小为8字节,我还尝试使用数据类型
unsigned long
,但在最终提交代码时,我仍然遇到运行时错误

我已经检查并验证了代码没有问题,因为有3个测试用例通过了给定的输入,但是对于其余的测试用例,代码没有问题,所以请使用用于存储数字的数据类型

请指导我使用正确的数据类型。以下链接中提到了问题:

代码:

#包括
#包括
大小a[100001]={0};
int main()
{
int test_no,i;
scanf(“%d”和测试编号);

for(i=0;iA
long
至少是64位有符号类型,并且能够存储该数量级的数字

现代C编译器(C99及以上版本)需要支持它


(顺便说一下,为了计算最小值或最大值,您不需要保留数组中的所有数字,而是可以存储当前达到的极值。)

@AndreKampling:有趣的链接,但请注意与C++14的一个重要区别:
有符号字符
必须是2的补码,如果有符号的话,
字符
也必须是2的补码。@Bathsheba你编写过任何不是2补码的系统吗?@PeterJ_01:是的。很多现金出纳机都使用有符号的大小。不过,很多个月以前。谨慎的电子设备es?但它们不是用C语言编程的。或者可能是其中之一:@PeterJ_01:那太好了。如果你能找到1971年以前的英语版本(英镑、先令、便士),那就有额外的奖励了。常规的4字节
int
s应该可以解决你的问题。你的问题是你把数字
x
的出现存储在
a[x]中
,但根据链接,每个
x
(或每个Aᵢ, 正如他们所说的)可以大到10⁹, 但是你的数组的维数是10⁵. (提示:这里不需要数组,因为只需要跟踪minium元素的出现情况。)在测试用例之间不清除
a
,这似乎很可怕。为什么
a
是全局的?对数组排序,然后递增,直到不再出现第一个数字。“代码没有问题”“剩下的测试用例是失败的”。这两个陈述相互矛盾。请选择一个,然后颠倒另一个。
#include <stdio.h>
#include<stdlib.h> 
size_t a[100001]={0};
int main()
{
    int test_no,i;

    scanf(" %d",&test_no);
    for(i=0;i<test_no;i++)
    {
        int j,n ;
        size_t x,min;
        scanf(" %d",&n);
        for(j=0;j<n;j++)
        {
            scanf(" %zu",&x);
            a[x]++;
            if(j==0)
            {
                min=x;
            }
            if(x<=min)
            {
                min=x;
            }
        }
        if(a[min]%2==0 && a[min]!=0) //In case if every integer occurs only once so all entries of count will be 0 , so he'll be unlucky 
        {
            printf("Unlucky \n");
        }
        else
        {
            printf("Lucky \n") ;
        }
    }

    return 0;
}