每一年中都有 1212 个月份。其中,1,3,5,7,8,10,121,3,5,7,8,10,12 月每个月有 3131 天;4,6,9,114,6,9,11 月每个月有 3030 天;而对于 22 月,闰年时有 2929 天,平年时有 2828 天。
现在,对应输入的日期,计算这是这一年的第几天。
一个年份是闰年当且仅当它满足下列两种情况其中的一种:
∙ ∙这个年份是 44 的整数倍,但不是 100100 的整数倍;
∙ ∙这个年份是 400400 的整数倍。
输入描述:
在一行上输入三个整数 a,b,c(1900≦a≦2200)a,b,c(1900≦a≦2200),分别代表年、月、日。保证输入的日期是合法的。
输出描述:
输出一个整数,代表输入的日期是这一年的第几天。
1. 月份天数存储
使用数组存储各月天数,注意索引1对应1月:
int monthday[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
2. 闰年判断
根据闰年规则调整2月天数:
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
monthday[2] = 29; // 闰年2月29天
}
3. 天数累加
累加前N-1个月的天数,再加上当前月的天数:
int sumday = day; // 当前月天数
for(int i = 1; i < month; i++) {
sumday += monthday[i]; // 累加前几个月的天数
}
完整代码实现
#include
int main()
{
int year, month, day;
scanf("%d %d %d", &year, &month, &day);
int sumday = day;
int monthday[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
monthday[2] = 29;
}
for(int i = 1; i < month; i++)
{
sumday = sumday + monthday[i];
}
printf("%d", sumday);
return 0;
}