Problem J: 回文数
Time Limit: 3 Sec Memory Limit: 256 MBSubmit: 819 Solved: 192
[ Submit][ Status][ Web Board]
Description
大家都知道回文数是正着读与反着读是一样的数,比如121,12321。
现在定义S是一个数的各个位数字的和,比如121 的和是4。
请你求出位数为5或6并且各位数字和为S的所有回文数字。
Input
第一行输入一个T 表示有T组样例(T<1000)。
接下来T行每行输入一个S(0<S<100)。
Output
对于每组样例,第一行输出Case x: 表示第x组样例
接下来输出符合条件的回文数,要求从小到大排序。如果没有符合条件的,请输出-1
Sample Input
24460
Sample Output
Case 1:99899499994589985598895679976688886697796769967778877787787796697859958868868877778886688895598949949958859967769976679985589994499Case 2:-1
HINT
Append Code
#include <stdio.h>//回文打表
#include <stdlib.h>
#include<string.h>
int s[53][105];
int panduan(int i)
{
int a;
if(i/100000==0)a=5;
else a=6;
if(a==5)
{
if(i/10000!=i%10)return 0;
if(i/10%10!=i%10000/1000)return 0;
}
else if(a==6)
{
if(i/100000!=i%10)return 0;//首位
if(i/10000%10!=i/10%10)return 0;//第二位
if(i/1000%10!=i/100%10)return 0;//第三位
}
return 1;
}
int dabiao(int n)
{
memset(s,0,sizeof(s));
int a=10001;
int cnt=0,b,i,e;
for(i=a; i<=999999; i++)
{
if(panduan(i)==0)continue;
b=i;
cnt=0;
while(b!=0)
{
cnt+=b%10;
b/=10;
}
for(e=0; s[cnt+2][e]!=0; e++);//找到不是0的位置
s[cnt+2][e]=i;
}
return 0;
}
int main()
{
//freopen("in.txt","r",stdin);
int n,n1;
int a;
dabiao(54);
int i;
scanf("%d",&n);
for(n1=1; n1<=n; n1++)
{
printf("Case %d:\n",n1);
scanf("%d",&a);
if(a>54||a<2)
{
printf("-1\n");
continue;
}
if(s[a+2][0]==0){
printf("-1\n");
continue;
}
for(i=0; s[a+2][i]!=0; i++)
{
printf("%d\n",s[a+2][i]);
}
}
return 0;
}