《C语言及程序设计》实践参考——回文日-阿里云开发者社区

开发者社区> 贺利坚> 正文

《C语言及程序设计》实践参考——回文日

简介: 返回:贺老师课程教学链接  项目要求 【项目6-回文日】很有趣的一个题目:2011年11月02日是一个回文日:2011 1102,在2011级同学做这道题时我们刚刚度过这一天!请列出本世纪还有多少个回文日(假如我们能活到百岁,你和我的……)。注意:一年只有12个月。[参考解答]     当年份确定后,如2015年,就看20155102能否构成一个合法的日期,其中51部分是月,02部分是日。显
+关注继续查看

返回:贺老师课程教学链接  项目要求


【项目6-回文日】
很有趣的一个题目:2011年11月02日是一个回文日:2011 1102,在2011级同学做这道题时我们刚刚度过这一天!请列出本世纪还有多少个回文日(假如我们能活到百岁,你和我的……)。注意:一年只有12个月。
[参考解答]

    当年份确定后,如2015年,就看20155102能否构成一个合法的日期,其中51部分是月,02部分是日。显然,由2015就不能得出一个回文日。
    再如,当年份取2090年时,20900902,由2090可以构造出一个回文日来。
    用年份循环并判断,而不是罗列所有的日期,显然效率上更好。

#include <stdio.h>
int main()
{
    int year,month,day,y,ymd;
    int is_cycle;   //用于标识判断结果:为0时不构成回文日,不为0时,构成回文日
    int count=0;
    for(year = 2015; year < 2100; year++)
    {
                        y = year;  //思考:后面直接用year不行吗?
        month=y%100; //原年份的后两位对应月
         month=(month%10)*10+month/10;//还得把月倒过来,例year=2015时,month由15换为51   
        day=y/100; //原年份的前两位对应日
        day=(day%10)*10+day/10;//对日做同样的处理
        is_cycle = 0;
        switch(month) //12个月份,各自对应合法的日期范围
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            if(day<=31)
                is_cycle =1;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            if(day<=30)
                is_cycle=1;
            break;
        case 2:
            if((year%4==0&&year%100!=0)||year%400==0) //闰年
            {
                if(day<=29)
                    is_cycle = 1;
            }
            else
            {
                if(day<=28)
                    is_cycle =1;
            }
            break;
        default:
            continue; //后两位倒过来根本构不成月份
        }
        if(is_cycle) //能构成回文日
        {
            y=year;
            ymd=year;   //构造出年月日的形式供输出
            while(y>0)
            {
                ymd=ymd*10+y%10;
                y=y/10;
            }
            printf("%d\n", ymd);
            count++;
        }
    }
    printf("共有 %d 个回文日。\n", count);
    printf("\n");
    return 0;
}



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
循环语句_鸡兔同笼问题|学习笔记
快速学习循环语句_鸡兔同笼问题
4 0
一起玩玩Dart FFI
ATA处女篇,如果对您有帮助,请狠狠的点赞 ## 是什么 `Dart FFI`([官方地址](https://dart.dev/guides/libraries/c-interop))是可以在Dart Native平台上运行的Dart移动、命令行和服务器应用上通过`Dart FFI`来调用C代码的一个技术。简单来说,就是Dart与C互相调用的一种机制。`Dart FFI`是Dart2.12.0版
6 0
我与阿里云的恋爱笔记
首先自我介绍一下,我是一名软件工程专业的大三学生,目前接触阿里云服务器已经有一年多的时间了。虽然在技术层面不可能和众多大牛们相比,但是我还是想聊聊我和阿里云之间的故事
171 0
函数与数组|学习笔记
快速学习函数与数组
5 0
字符串_习题课_4|学习笔记
快速学习字符串_习题课_4
5 0
函数练习1|学习笔记
快速学习函数练习1
4 0
WIndows下Clion+gcc配置教程
WIndows下Clion+gcc配置教程
31 0
分析 chrome 源码中 WARN_UNUSED_RESULT 宏
问题 今天浏览 chrome 源码时,发现了一个非常有意思的宏定义,它就是 WARN_UNUSED_RESULT ,用法如下图所示:
14 0
我与阿里云的故事
我是一名专业为软件工程的大三学生,目前使用阿里云服务器已有一年多的时间了
127 0
C语言选择法与冒泡法排序
C语言选择法与冒泡法排序
16 0
+关注
贺利坚
烟台大学计算机学院教师,建设系列学习资源,改革教学方法,为IT菜鸟建跑道,让大一的孩子会编程,为迷茫的大学生出主意,一起追求快乐的大学。 著书《逆袭大学:传给IT学子的正能量》,帮助处于迷茫中的大学
1965
文章
0
问答
文章排行榜
最热
最新