Problem Description 给定一个日期,输出这个日期是该年的第几天。 Input 输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。 Output 对于每组输入数据,输出一行,表示该日期是该年的第几天。 Sample Input 1985/1/20 2006/3/1 Sample Output 20 71 |
做这题前先把常识了解一下,闰年是能被4整除且不可以被100整除的年份,或者能被400整除的年份,其余的都为平年。还有一个特点是闰年的2月份有29天,平年2月份28天。这里的代码有一个数组定义问题容易出错:
a[13]={0,0,31,59,90,120,151,181,212,243,273,304,334};
b[13]={0,0,31,60,91,121,152,182,213,244,274,305,335};
这样的初始化是错误的,a[13],b[13]分别表示一个数了,需要在定义的同时赋值才正确:
int a[13]={0,0,31,59,90,120,151,181,212,243,273,304,334};//平年
int b[13]={0,0,31,60,91,121,152,182,213,244,274,305,335};//闰年
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int N,Y,R,T;
//memset(a,0,sizeof(a));
//memset(b,0,sizeof(b));
int a[13]={0,0,31,59,90,120,151,181,212,243,273,304,334};//平年
int b[13]={0,0,31,60,91,121,152,182,213,244,274,305,335};//闰年
while(~scanf("%d/%d/%d",&N,&Y,&R))
{
if((N%4==0&&N%100!=0)|| N%400==0)
T=b[Y]+R;
else
T=a[Y]+R;
printf("%d\n",T);
}
return 0;
}
运行结果: