1. 项目概述:一个月有多少天?
计算一个月有多少天是编程入门阶段常见的练习题,也是检验基础逻辑能力的经典案例。这个题目看似简单,但涉及闰年判断、月份分类、边界条件处理等多个编程核心概念。作为东华OJ平台的第四道基础题,它很好地衔接了前序的输入输出训练,为后续更复杂的算法题打下基础。
在实际开发中,日期计算是高频需求——从电商平台的促销周期设置,到金融系统的利息计算,再到项目管理软件的时间轴生成,都需要精确的月份天数计算。这道题的价值在于:通过解决这个具体问题,我们能掌握条件分支、逻辑运算、输入验证等通用编程技能。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心算法解析
2.1 月份分类处理
常规月份天数分布如下:
- 31天的月份:1、3、5、7、8、10、12月
- 30天的月份:4、6、9、11月
- 特殊月份:2月(28或29天)
用C++实现时,switch-case结构最为直观:
cpp复制switch(month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days = 31;
break;
case 4: case 6: case 9: case 11:
days = 30;
break;
case 2:
// 闰年判断将在2.2节详解
break;
default:
// 错误处理
}
注意:现代C++(C++11及以上)允许switch中使用字符串,但本题用整型月份更合适。
2.2 闰年判定算法
格里高利历的闰年规则:
- 能被4整除但不能被100整除,或
- 能被400整除
对应的C++表达式:
cpp复制bool isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
常见错误包括:
- 忽略2100年不是闰年(能被100整除但不能被400整除)
- 将逻辑与(&&)和逻辑或(||)混淆
- 未考虑负数年份(本题通常假设输入合法)
2.3 输入验证要点
健壮的程序应处理非法输入:
cp复制
