描述
根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。
进阶:时间复杂度:O(n) ,空间复杂度:O(1)
输入描述:
输入一行,每行空格分割,分别是年,月,日
输出描述:
输出是这一年的第几天
示例1
输入:
2012 12 31
输出:
366
示例2
输入:
1982 3 4
输出:
63
解题思路:
本题的没什么难点,要说唯一的难点就是闰年平年的区别,以及每个月到底有几天,了解完之后相信大家都会做。
闰年:能够被4整除,但是不能被100整除,或者能被400整除;满足条件的就是闰年,否则就是平年,闰年的二月比平年多1天,即平年2月有28天,闰年的2月有29天。
其余月份的天数(小时候被教按照拇指来区分大小月)
1、3、5、7、8、10、12等月份数为31天;
4、6、9、11等月份数为30天;
了解到这就可以写代码了。
#include <stdio.h>
int main()
{
int year,month,day,cnt;
scanf("%d%d%d",&year,&month,&day);
switch(month)
{
case 1:
cnt=day;
break;
case 2:
cnt=31+day;
break;
case 3:
cnt=31+28+day;
break;
case 4:
cnt=31*2+28+day;
break;
case 5:
cnt=31*2+28+30+day;
break;
case 6:
cnt=31*3+28+30+day;
break;
case 7:
cnt=31*3+28+30*2+day;
break;
case 8:
cnt=31*4+28+30*2+day;
break;
case 9:
cnt=31*5+28+30*2+day;
break;
case 10:
cnt=31*5+28+30*3+day;
break;
case 11:
cnt=31*6+28+30*3+day;
break;
case 12:
cnt=31*6+28+30*4+day;
break;
}
if(((year%4==0&&year%100!=0)||year%400==0)&&month>2) //判断是否为闰年,且月份数大于2
{
cnt++;
}
printf("%d\n",cnt);
return 0;
}