(1915) 第几天
Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY-MM-DD组成,具体参见Sample Input,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
2000-01-01
Sample Output
1
[参考解答]
(1)
#include "stdio.h"
int main()
{
int y,m,d; //分别代表年月日
int days; //计算得到的天数
while (scanf("%d-%d-%d",&y,&m,&d)!=EOF)
{
days=d;
//下面要加上前m-1月的天数
int i;
for(i=1; i<m; i++)
{
switch(i)
{
case 2:
days+=((y%4==0&&y%100!=0)||y%400==0)?29:28;
break;
case 4:
case 6:
case 9:
case 11:
days+=30;
break;
default:
days+=31;
break;
}
}
printf("%d\n",days);
}
return 0;
}
(2)
#include "stdio.h"
int main()
{
int y,m,d; //分别代表年月日
int days; //计算得到的天数
int i;
while (scanf("%d-%d-%d",&y,&m,&d)!=EOF)
{
days=d;
//下面要加上前m-1月的天数
for(i=1; i<m; i++)
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
days+=31;
else if (i==4||i==6||i==9||i==11)
days+=30;
else
days+=((y%4==0&&y%100!=0)||y%400==0)?29:28;
}
printf("%d\n",days);
}
return 0;
}
(3)后面要学习数组。然后就可以这样来了(对数组充满期待吧)
#include "stdio.h"
int main()
{
int y,m,d; //分别代表年月日
int days; //计算得到的天数
int i;
int a[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
while (scanf("%d-%d-%d",&y,&m,&d)!=EOF)
{
days=d;
//下面要加上前m-1月的天数
for(i=1; i<m; i++)
{
days+=a[i];
}
if(m>2&&((y%4==0&&y%100!=0)||y%400==0)) //若闰年,且晚于2月,加一天
days++;
printf("%d\n",days);
}
return 0;
}
(4)有同学写成下面的代码,结果对,但这样的程序的确不好
#include "stdio.h"
int main()
{
int y,m,d; //分别代表年月日
int days; //计算得到的天数
while (scanf("%d-%d-%d",&y,&m,&d)!=EOF)
{
if(((y%4==0)&&(y%100!=0))||(y%400==0))
{
switch(m)
{
case 1:
days=d;
break;
case 2:
days=d+31;
break;
case 3:
days=d+31+29;
break;
case 4:
days=d+31+29+31;
break;
case 5:
days=d+31+29+31+30;
break;
case 6:
days=d+31+29+31+30+31;
break;
case 7:
days=d+31+29+31+30+31+30;
break;
case 8:
days=d+31+29+31+30+31+30+31;
break;
case 9:
days=d+31+29+31+30+31+30+31+31;
break;
case 10:
days=d+31+29+31+30+31+30+31+31+30;
break;
case 11:
days=d+31+29+31+30+31+30+31+31+30+31;
break;
case 12:
days=d+31+29+31+30+31+30+31+31+30+31+30;
break;
}
}
else
{
switch(m)
{
case 1:
days=d;
break;
case 2:
days=d+31;
break;
case 3:
days=d+31+28;
break;
case 4:
days=d+31+28+31;
break;
case 5:
days=d+31+28+31+30;
break;
case 6:
days=d+31+28+31+30+31;
break;
case 7:
days=d+31+28+31+30+31+30;
break;
case 8:
days=d+31+28+31+30+31+30+31;
break;
case 9:
days=d+31+28+31+30+31+30+31+31;
break;
case 10:
days=d+31+28+31+30+31+30+31+31+30;
break;
case 11:
days=d+31+28+31+30+31+30+31+31+30+31;
break;
case 12:
days=d+31+28+31+30+31+30+31+31+30+31+30;
break;
}
}
printf("%d\n",days);
}
return 0;
}