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;iAlong
至少是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;
}