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

本文通过编程方式列举了21世纪所有日期中的回文日,并详细展示了使用C语言实现的逻辑过程,包括循环枚举、switch语句筛选合理日期、逻辑运算及反序数模块的构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述: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 没有初始化;

 

 

 

 

=

转载于:https://www.cnblogs.com/miyazakehime/p/9140339.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值