C语言 · 特殊回文数

问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
  输入一行,包含一个正整数n。
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
  1<=n<=54。
 

代码一

理解题意:

  求出5、6位十进制中所有的特殊回文数—— 每位数字之和等于输入的一个整数n(1<=n<=54)。
思路:

  将5、6位十进制的每一位拆分出来比较,又分两种情况:五位的和六位的。

 1 # include<stdio.h> 
 2 int main(){
 3     int a, b, c, d, e, f, n;
 4     long i;
 5     scanf("%d", & n);
 6     for (i=10000;i < 1000000;i++){
 7         if (i < 100000){
 8             a = i / 10000 % 10;
 9             b = i / 1000 % 10;
10             c = i / 100 % 10;
11             d = i / 10 % 10;
12             e = i / 1 % 10;
13             if (a == e & & b == d & & a+b+c+d+e == n){
14                 printf("%ld\n", i);
15             }
16         }
17         else if (i >= 100000){
18             a = i / 100000 % 10;
19             b = i / 10000 % 10;
20             c = i / 1000 % 10;
21             d = i / 100 % 10;
22             e = i / 10 % 10;
23             f = i / 1 % 10;
24             if (a == f & & b == e & & c == d & & a+b+c+d+e+f == n){
25                 printf("%ld\n", i);
26             }
27         }
28     }
29 }

 代码二

 

 1 #include<stdio.h> 
 2 int main(){
 3     int n,i,j,sum;
 4     char str[10];//定义字符数组,长度为10 
 5     scanf("%d",&n);
 6     for(i=10000;i<1000000;i++){
 7         /*将当前的i值转成字符赋给str,即str[5]="10000"*/
 8         sprintf(str, "%d", i);
 9         sum = 0;//初始化sum 
10         for(j = 0; str[j]; j++)
11         /*字符和数字是有区别的。要将字符变成数字,需要减去一个字符0*/
12             sum += str[j] - '0';
13         if(sum != n)
14             continue;
15         if(i < 100000 && str[0] == str[4] && str[1] == str[3])
16             printf("%d\n", i);
17         else if(i >= 100000 && str[0] == str[5] && str[1] == str[4] && str[2] == str[3])
18             printf("%d\n", i);
19     }
20     return 0;
21 }

 

 

 

posted @ 2016-12-22 16:34  人间烟火地三鲜  阅读(1595)  评论(0编辑  收藏  举报