
日历问题
闰年判断:闰年的定义是能被4整除但不能被100整除的年份,除非它还能被400整除。例如,2000年是闰年,而1900年不是。 日期计算:从2000年1月1日开始,逐日递减天数,直到找到目标日期。我们需要处理每年的天数,包括闰年的调整。 月份处理:每个月的天数不同,需要逐个月减去天数,直到找到目标月份。 星期计算:使用取模运算来确定星期几,星期几从星期天开始编号为0到6。 闰年判断函数: 主程序:读取输入天数,逐日递减,计算年份、月份和日期。 年份计算:逐年减去天数,直到天数不足一年的天数。 月份和日期计算:逐月减去天数,直到找到目标月份和日期。 星期计算:使用取模运算确定星期几,并输出结果。
发布日期:2021-05-07 18:29:27
浏览次数:20
分类:精选文章
本文共 2398 字,大约阅读时间需要 7 分钟。
为了解决这个问题,我们需要根据给定的天数计算出对应的日期和星期几。从2000年1月1日开始,逐日递减天数,直到找到目标日期。我们将使用C语言来实现这一功能。
方法思路
解决代码
#includechar week[7][10] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};int year_type[2] = {365, 366}; // 0:平年, 1:闰年int month_day[2][12] = {31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31};int type(int m) { if (m % 4 != 0 || (m % 100 == 0 && m % 400 != 0)) { return 0; } else { return 1; }}int main() { int days, dayofweek; int i = 0, j = 0; while (scanf("%d", &days) != -1) { if (days == -1) { break; } int current_days = days; int year_count = 0; int month_count = 0; int current_year = 2000; int current_month = 0; int current_day = 1; // 计算年份 while (current_days > 0) { int is_leap = type(current_year); int total_days_in_year = is_leap ? 366 : 365; if (current_days >= total_days_in_year) { year_count++; current_days -= total_days_in_year; } else { break; } current_year += 1; } // 计算月份和日期 if (current_days > 0) { current_month = current_year; current_year = 2000; j = 0; while (current_days > 0) { int month_days = month_day[is_leap ? 1 : 0][j]; if (current_days >= month_days) { j++; current_days -= month_days; } else { current_day = current_days + 1; break; } } } else { current_day = current_days + 1; } // 计算星期几 dayofweek = current_day % 7; if (dayofweek < 0) { dayofweek += 7; } // 输出结果 printf("%04d-%02d-%02d%s\n", current_year, current_month, current_day, week[dayofweek]); }}
代码解释
type
函数根据给定的年份判断是否是闰年。通过这种方法,我们能够准确地计算出从2000年1月1日开始的任意天数对应的日期和星期几。
发表评论
最新留言
很好
[***.229.124.182]2025年04月14日 00时21分41秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
docker基础:容器生命周期管理命令
2019-03-06
Shell脚本学习指南
2019-03-06
日志切分神器--logrotate
2019-03-06
C#开发BIMFACE系列35 服务端API之模型对比6:获取模型构建对比分类树
2019-03-06
C# 规范建议
2019-03-06
.NET 5.0正式发布,新功能特性(翻译)
2019-03-06
重磅推出:AutoProject Studio 自动化项目生成器
2019-03-06
一些有趣的线段树玩法
2019-03-06
Go语言中的数组与数组切片
2019-03-06
操作系统启动过程
2019-03-06
进程管理
2019-03-06
物理层
2019-03-06
内建函数
2019-03-06
80x86指令系统-1-数据传送指令
2019-03-06
C语言+easyX图形库的推箱子实现
2019-03-06
应用程序与dll的静态库通信
2019-03-06
反汇编-流程控制语句-2-循环控制语句分析
2019-03-06
调试vs2019代码的流程
2019-03-06
游戏外挂基础-概述
2019-03-06
脱壳与加壳-加壳-6-代码实现加密导入表
2019-03-06