我刚刚开始在SPOJ中进行竞争性编程。我很困惑,因为我在runtime error
获得了ideone
。问题是:
如果正整数在从左到右和从右到左读取时在十进制系统中的表示相同,则称为回文。对于不超过K
个数字的给定正整数1000000
,请将大于K的最小回文值写入输出。始终显示数字而不带前导零。
的输入
第一行包含整数t,即测试用例的数量。整数K在下一行中给出。
的输出
对于每个K,输出大于K的最小回文
实施例
输入:
2
808个
2133
输出:
818个
2222
我的计划:
#include <stdio.h>
int main(void)
{
int t,i,reverse,same;
scanf("%d",&t); //t is no. of test cases
int num[t]; //num[t] is array of t elements
for(i=0;i<t;i++)
scanf("%d",&num[i]);
i=0; //since i will be equal to t therefore i is assigned to 0.
while(t--)
{
if(num[i]<=1000000)
{
while(num[i]++)
{
reverse=0;
same=num[i];
while(same>0)
{
reverse=reverse*10;
reverse=reverse+same%10;
same=same/10;
}
if(reverse==num[i])
printf("%d",reverse);
printf("\n");
if(reverse==num[i])
break;
}
}
i++;
}
return 0;
}
我不知道我错在哪里。对不起我问这个问题可能是有人问过这个问题。我试图找到结果但是不能得到答案。谢谢你 提前,抱歉我的英语不好。
答案 0 :(得分:2)
The question doesn't say that the number will be less than 1000000. It says that the number has less than 1 million digits. A number with a million digits looks like this
591875018734106743196734198673419067843196874398674319687431986743918674319867431986743198674319876341987643198764319876341987643198764319876431987643198763419876431987643198764319876139876...
You can't use scanf
to read a number that has a million digits, and you can't store that number in an int
.
答案 1 :(得分:1)
发生错误的最可能原因是某些内存故障。请记住,在线评判/编译器限制了您的可用内存,如果您尝试分配/使用的内存超过可用内存,则会出现运行时错误。这也发生在你的机器上,但通常你的程序可用的内存比在线评委的情况要多得多。
在您的情况下,您可以通过将num数组的数据类型从int更改为short或even char来减少程序的内存使用量。