题目描述
根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。
进阶:时间复杂度:O(n),空间复杂度:O(1)
输入描述:
输入一行,每行空格分割,分别是年,月,日
输出描述:
输出是这一年的第几天
示例1
输入:
2012 12 31
输出:
366
示例2
输入:
1982 3 4
输出:
63
题解思路
判断任意年份是否为闰年,需要满足以下条件中的任意一个:
- 该年份能被 4 整除同时不能被 100 整除
- 该年份能被400整除
代码实现
#include <stdio.h>
int main()
{
int year, month, day;
int month_days[] = {31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
while(scanf("%d %d %d", &year, &month, &day) != EOF) {
int days = 0;
if(month >= 2) {
days = month_days[month - 2] + day;
}
else {
days = day;
}
// 判断year是否是闰年,是闰年且大于2月份多加一天
if(month > 2 && (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))) {
days += 1;
}
printf("%d\n", days);
}
return 0;
}