以下是我在C中写的“The Next Palindrome”的代码:
#include<stdio.h>
int main(void)
{
int check(int); //function declaration
int t,i,k[1000],flag,n;
scanf("%d",&t); //test cases
for(i=0; i<t; i++)
scanf("%d",&k[i]); //numbers
for(i=0; i<t; i++)
{
if(k[i]<=9999999) //Number should be of 1000000 digits
{
k[i]++;
while(1)
{
flag=check(k[i]); //palindrome check
if(flag==1)
{
printf("%d\n",k[i]); //prints if it is palindrome and breaks
break;
}
else
k[i]++; //go to the next number
}
}
}
return 0;
}
int check(int n)
{
int rn=0;
int temp=n;
while(n!=0)
{
rn=rn*10+n%10; //reversing
n=n/10;
}
if(rn==temp) //number is palindrome
return 1;
else //number is not a palindrome
return 0;
}
这是来自SPOJ
的初级问题。
我试着在Codeblocks上运行这个代码,它运行得很流畅。
在SPOJ
中,为什么显示错误的输出?
答案 0 :(得分:1)
在SPOJ中,为什么它显示错误的输出?
这是一个不错的解决方案,适用于小输入,但由于多种原因,它不会通过SPOJ
。
要求是:
如果正整数表示为正整数,则称为回文结构 从左到右和从右读取时,十进制系统是相同的 向左。对于不超过
positive integer K
的给定1000000
数字,写出大于K的最小回文的值 输出。始终显示数字而不带前导零。输入: 第一行包含整数t,测试用例的数量。 整数K在下一行中给出。
您的计划中哪些要求被破坏了?
1)您的假设是,自那以后只会提供1000
个数字进行处理
你宣布了
k[1000]
1000
。您必须为数字动态分配存储空间。<强> 2)强> 这条线
if(k[i]<=9999999)
假设输入小于9999999
- 错误,要求说positive integer K of not more than 1000000 digits
意味着更大的数字,例如199999991
也必须被接受。
3)声明
对于给定的正整数K不超过1000000位
以及警告
警告:输入/输出数据较大,请注意某些语言
让我们得出的结论是,应该期待真正的大数字!
int
类型不适合存储这么大的数字。如果数字大于int
,则INT_MAX +2147483647
将无法保留该值。 (检查C库<limits.h>
)
那么,如何通过SPOJ
挑战?
<强> 提示: 强>
可能的解决方案之一 - 对字符串进行操作。