第几天?

来源:互联网 发布:精通qt4编程 编辑:程序博客网 时间:2024/06/10 02:54

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;} 

0 0