前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「优质题解」任意年月日历输出

「优质题解」任意年月日历输出

作者头像
编程范 源代码公司
发布2019-12-12 16:09:36
7660
发布2019-12-12 16:09:36
举报

本题目主要解决如下几个问题: 1、该月的1号是星期几; 2、该月份有几天; 3、2月份天数的特殊处理; 4、输出格式问题。

我们来一次解决如上问题:

问题1:该月的1号是星期几

我们知道星期几是以7天作为循环周期的,我们分别用0~6这几个数字,分别代表星期天到星期六。

为此我们可以用余数的方法来求得第k天后是星期几。 我们先用简单的来计算一下,现已知今天是星期天,第k天后是星期几,我们可以观察下图,得出一个规律:第k天后是星期k%7(如果是0代表星期天)

题目给的已知条件是星期一,现要求第k天是星期几,这里的k是2007/1/1到所要求的XXXX年XX月1日的总天数,为此我们得到 第k天后是星期(k-(7-1))%7,这里的1是指星期一所对应序号1,因为我们是从星期一开始计算的,而减去(7-1)是为了把初始值变成星期天,方便计算。 通过余数的计算我们把(k-(7-1))%7化简一下: ( k - (7-1))%7 =( k - 7 + 1 )%7 =( k%7 - 7%7 + 1%7 )%7 =( k%7 + 1)%7 (只要知道总天数,代入该式就可求出XXXX年XX月1日是星期几)

问题2:该月份有几天

我们可以用一个数组来记录每月有几天,需要时在调用。 static int MonthDay[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 以365天的来算,其中数组下标表示对应的月份,下标0对应的月份做特殊处理,遇到闰年再把MonthDay[2]加一即可。

问题3:2月份天数的特殊处理

其实也就是判断某年是否为闰年的问题,比较简单,代码如下:

问题4:输出格式问题

查看样例输出,可以看出,每一个星期几对应3个空格,即用%3d的格式输出。 每次输出星期6之后,就要输出\n,但这里需要注意一个问题,即最后输出“——————————-”前也要输出一个\n,即以下代码输出最后一行:

这会导致该月份最后一天是星期6这种特殊情况,而输出多一个\n,例如2015年2月。

所以用if语句判断最后一行前面的\n的输出情况。

总的代码如下:

若觉得文章对你有帮助,随手转发分享,也是我们继续更新的动力

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程范 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题1:该月的1号是星期几
  • 问题2:该月份有几天
  • 问题3:2月份天数的特殊处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档