问题描述:
给定一个日期,输出这个日期是该年的第几天。
输入:
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成。
输出:
对于每组输入数据,输出一行,表示该日期是该年的第几天。
版本一:
#include<stdio.h>
int main()
{
int i,year,month,day,sum;
int a[12]={0,31,28,31,30,31,30,31,31,30,31,30};//用于存储每个月的前一个月的固定天数(2月暂定28天)
while(~scanf("%d/%d/%d",&year,&month,&day))//输入常用的判断方法
{
sum=day;//获得当前月份天数
for(i=0;i<month;i++)//根据输入月份计算之前的月份天数累加和
sum+=a[i];
if((year%400==0||(year%100&&year%4==0))&&month>2) sum+=1;//被4整除且不能被100整除,能被400整除的年份为闰年,闰年2月29天
printf("%d\n",sum);
}
}
版本二:
#include<stdio.h>
int main()
{
int year,month,day;
int sum=0,flag=0;
while(scanf("%d/%d/%d",&year,&month,&day)!=EOF)
{
if(year%400==0||(year%4==0&&year%100!=0)) //能被4整除且不能被100整除,能被400整除的年份为闰年
flag=1;//闰年2月29天
else
flag=0;
switch(month)//switch下的case未遇到break则会依次向下执行
{
case 12: sum+=30;
case 11: sum+=31;
case 10: sum+=30;
case 9: sum+=31;
case 8: sum+=31;
case 7: sum+=30;
case 6: sum+=31;
case 5: sum+=30;
case 4: sum+=31;
case 3: sum+=28+flag;
case 2: sum+=31;
case 1: sum+=day;break;
default:return 0;
}
printf("%d\n",sum);
sum=0; //输出之后清零
}
return 0;
}