HJ73 计算日期到天数转换
描述
每一年中都有 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 <stdio.h>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;
}