C SPOJ:PALIN-下一个回文:输出错误
下面是我用C写的“下一个回文”的代码:C SPOJ:PALIN-下一个回文:输出错误,c,C,下面是我用C写的“下一个回文”的代码: #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
#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;
}
#包括
内部主(空)
{
int检查(int);//函数声明
int t,i,k[1000],flag,n;
scanf(“%d”,&t);//测试用例
对于(i=0;i
在SPOJ中,为什么显示错误的输出
这是一个很好的解决方案,它适用于小输入,但是由于几个原因,它不会通过SPOJ
要求是:
如果正整数在
从左到右和从右读取时,十进制是相同的
左。对于给定的正整数K
,不超过1000000
数字,将大于K的最小回文值写入
输出。显示的数字始终不带前导零
输入:
第一行包含整数t,即测试用例的数量。
整数K在接下来的t行中给出
那么,在您的程序中,哪些需求被打破了呢
1)您的假设是,自
你宣布
k[1000]
- 错误,第一行中给出了行数。行数可能远远超过
1000
。您必须为这些数字动态分配存储空间
2)
线路
if(k[i]<=9999999)
if(k[i]在永久while循环之前似乎存在不必要且可能错误的k[i]++。删除该循环并重试。另请参阅@Sanjay sophok[i]++;
是绝对必要的。要求是“将大于k的最小回文的值写入输出。”因此,对于输入808
来说,输出应该是818
。该程序可以用于小数量和小数量的输入。但这不是SPOJ
想要的。