Problem Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20
2006/3/12
Sample Output
20
71
有时看到数字与字符混合时,不一定要用字符串处理,特别是对这题,数字与“\”有规律的排列.下面是一个AC的代码。
#include<stdio.h>
int Isrunnian(int year)
{
if(year%400==0||(year%4==0&&year%100!=0))
return 1;
else
return 0;
}
int main()
{
int year,month,day;
<span style="color:#ff0000;">while(scanf("%d/%d/%d",&year,&month,&day)==3)//值得学习的地方!!!
</span> {
int i;
int ans=0;
for( i=1;i<month;i++)
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
ans+=31;
else if(i==4||i==6||i==9||i==11)
ans+=30;
else
{
if(Isrunnian(year))
ans+=29;
else
ans+=28;
}
}
ans+=day;
printf("%d\n",ans);
}
return 0;
}
用字符串写的,不知道为什么没AC。
#include<stdio.h>
#include<string.h>
char a[1000];
int Isrunnian(int year)
{
if(year%400==0||(year%4==0&&year%100!=0))
return 1;
else
return 0;
}
int main()
{
while(scanf("%s",a)!=EOF)
{
int n,year,month,day;
n=strlen(a);
if(n==9)
{
year=(a[0]-'0')*1000+(a[1]-'0')*100+(a[2]-'0')*10+a[3]-'0';
month=a[5]-'0';
day=(a[7]-'0')*10+a[8]-'0';
}
else
{
year=(a[0]-'0')*1000+(a[1]-'0')*100+(a[2]-'0')*10+a[3]-'0';
month=(a[5]-'0')*10+a[6]-'0';
day=(a[8]-'0')*10+a[9]-'0';
}
int ans=0;
for(int i=1;i<month;i++)
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
ans+=31;
else if(i==4||i==6||i==9||i==11)
ans+=30;
else
{
if(Isrunnian(year))
ans+=29;
else
ans+=28;
}
}
ans+=day;
printf("%d\n",ans);
}
return 0;
}