【C语言及程序设计】项目1-39-6:回文日

问题描述:2011年11月02日是一个回文日:2011 1102。请列出本世纪还有多少个回文日。

 1 int main()
 2 {
 3     int dyear(2011), dmonth(11), dday(2), fyear, eyear, c1(0), c2(0), c3(0);
 4     int r_fyear, r_eyear, m1, m2;
 5 
 6     //枚举
 7     for (dyear = 2000; dyear < 3000; dyear++)
 8         for (dday = 1; dday < 31; dday++)
 9             for (dmonth = 1; dmonth <= 12; dmonth++)
10             {
11 
12                 //筛选合理的年月日数值
13                 switch (dmonth)
14                 {
15 
16                 case 4:
17                 case 6:
18                 case 9:
19                 case 11: c1 = (dday <= 30); break;
20 
21                 case 1:
22                 case 3:
23                 case 5:
24                 case 7:
25                 case 8:
26                 case 10:
27                 case 12: c2 = (dday <= 31); break;
28 
29                 case 2: c3 = (
30                     ((dyear % 4 == 0 && dyear % 100 != 0) || dyear % 400 == 0)
31                     &&
32                     (dday <= 29)
33                     )
34                     ||
35                     (
36                     (!((dyear % 4 == 0 && dyear % 100 != 0) || dyear % 400 == 0))
37                         &&
38                         (dday <= 28)
39                         );
40 
41                 default:break;
42                 }
43 
44                 r_fyear = 0;
45                 r_eyear = 0;
46 
47                 if (c1 + c2 + c3 > 0)
48                 {
49                     //将年数值拆成两段,利用反序数模块与日月数值分别进行比较
50                     fyear = dyear / 100;
51                     eyear = dyear % 100;
52 
53                     m1 = 0;
54                     m2 = 0;
55 
56                     while (fyear > 0)
57                     {
58                         r_fyear = r_fyear * 10 + fyear % 10;
59                         fyear /= 10;
60                     }
61 
62                     while (eyear > 0)
63                     {
64                         r_eyear = r_eyear * 10 + eyear % 10;
65                         eyear /= 10;
66                     }
67                 }
68 
69                 if (r_fyear == dday && r_eyear == dmonth)
70                 {
71                     printf("%d.%d.%d\n", dyear, dmonth, dday);
72                 }
73 
74             }
75 
76     return 0;
77 }

 

感想:

练习了循环枚举、switch语句筛选、逻辑运算、反序数模块。

2018.6.8 发现c1, c2 ,c3 没有初始化;

 

 

 

 

=

posted @ 2018-06-05 16:13  Miyazakehime  阅读(209)  评论(0编辑  收藏  举报