问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。 本题要求你找到一些5位或6位的十进制数字。满足如下要求: 该数字的各个数位之和等于输入的整数。 输入格式 一个正整数 n (10<n<100), 表示要求满足的数位和。 输出格式 若干行,每行包含一个满足要求的5位或6位整数。 数字按从小到大的顺序排列。 如果没有满足条件的,输出:-1 样例输入 44 样例输出 99899 499994 589985 598895 679976 688886 697796 769967 778877 787787 796697 859958 868868 877778 886688 895598 949949 958859 967769 976679 985589 994499 样例输入 60 样例输出 -1
代码如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 int main(void) 6 { 7 int n; 8 int i,j,k,res,count; 9 int check[6]; 10 scanf("%d",&n); 11 12 res = 0; 13 for (i=10000 ; i<1000000 ; i++) 14 { 15 count = k = 0; 16 for (j=i ; j>0 ; j/=10) 17 { 18 check[k] = j%10; //用于验证是否满足条件 19 count += check[k++];//记录每位数,用于验证回文 20 } 21 22 if (count == n) 23 { 24 for (j=0 ; j<k ; j++)//判断是否回文 25 { 26 if (check[j] != check[k-1-j]) 27 break; 28 } 29 30 if (j==k)//输出回文 31 { 32 res ++; 33 printf("%d\n",i); 34 } 35 } 36 } 37 38 if (res == 0) 39 printf("-1"); 40 41 return 0; 42 }
解题思路:
对数字取余获得每一位,并记录以及累计其和
1.判断和是否等于n
2.判断是否为回文
满足以上条件则输出数字