C SPOJ:PALIN-下一个回文:输出错误

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

下面是我用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; 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 sopho
k[i]++;
是绝对必要的。要求是“将大于k的最小回文的值写入输出。”因此,对于输入
808
来说,输出应该是
818
。该程序可以用于小数量和小数量的输入。但这不是
SPOJ
想要的。