1. 题目
1.1 题目描述
- 根据输入的日期,计算是这一年的第几天。
- 保证年份为4位数且日期合法。
- 进阶:时间复杂度:O(n) ,空间复杂度:O(1)
1.2 输入描述
- 输入一行,每行空格分割,分别是年,月,日
1.3 输出描述
- 输出是这一年的第几天
2. 示例
3. 分析
- 这道题简单解法其实将每个月的天数枚举出来,
- 然后根据当前月份向前累加满月的天数,然后再加上当前月所在的天数。
- 最终考虑平闰年的2月份区别是否增加一天
- 其中需要注意的是平年和闰年的判断,
- 而且是闰年的月份大于2的时候,也就是2月走完,总天数才能加1
- 比如: 2000年2月18日,虽然是闰年,但是2月都没走完那是不能加上闰年多出的一天的
4. 完整代码
#include <stdio.h>
int is_leap_year(int year)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
return 1;
}
return 0;
}//判断是否为闰年
int main()
{
int month_day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int year, month, day;
while (scanf("%d %d %d", &year, &month, &day) != EOF)
{
int total_day = day;//先把当前月份天数加上
if (is_leap_year(year) == 1 && month > 2);
{
total_day++;
}//若闰年且月份大于2,则在平年的基础上+1
for (int i = month - 1; i > 0; i--)
{
total_day += month_day[i];//向前累加当月的天数即可
}
printf("%d\n", total_day);
}
return 0;
}
- 运行结果:
最后,
恭喜你又遥遥领先了别人!