首页 > 代码库 > 武汉科技大学ACM :1010: 华科版C语言程序设计教程(第二版)例题7.8

武汉科技大学ACM :1010: 华科版C语言程序设计教程(第二版)例题7.8

Problem Description

输入一个用年月日表示的日期,求该日期是该年的第几天。输入某年的第几天,输出这一天是该年的几月几号,茂茂解不出,需要你的帮助。

Input

开始有个整数k,表示询问的种类,如果k=1,后面有三个合法的整数a,b,c,表示输入的年月日,此时输出该日期是该年的第几天;如果k=2,后面有两个合法的整数a,b,求a年的第b天的日期。保证所有的输入合法。

Output

对于询问1,输出一个整数表示是该年的第几天。 对于询问2,输出年月月,格式为****/**/** 如2013/09/07

Sample Input

2 2013 701 2013 3 11 2000 3 1

Sample Output

2013/03/116061


我的代码:
 1 #include <stdio.h> 2  3 int main() 4 { 5     struct mydata 6     { 7         int year; 8         int month; 9         int day;10     } date;11     int days,month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};12     int dyas[13]={0,31,60,91,121,152,182,213,244,274,305,335,366};13     int dyas1[13]={0,31,59,90,120,151,181,212,243,273,304,334,365};    14     int sw,yera,dya,mon=-1,d,i;15     while(scanf("%d",&sw)!= EOF)16     {17         if(1==sw)18         {19             days=0;20             scanf("%d%d%d",&date.year,&date.month,&date.day);21             int i;22             for(i=0;i<date.month;i++)23                 days+=month[i];24             days+=date.day;25             if((date.year%4==0&&date.year%100!=0)||(date.year%400==0))26                 if(date.month>=3)27                     days++;28                 printf("%d\n",days);29         }30         if(2==sw)31         {32             33             scanf("%d%d",&yera,&dya);34             if((yera%4==0&&yera%100!=0)||(yera%400==0))35             {36                 for(i=0;i<13;i++)37                 {38                     if(dyas[i]>dya)39                     {40                         mon=i;41                         d=dya-dyas[i-1];42                         break;43                     }44                     else if(dyas[i]==dya)45                     {46                         mon=i;47                         d=month[i];48                         if(mon==2)49                             d++;50                         break;51                     }52                 }53             }54             else55             {56                 for(i=0;i<13;i++)57                 {58                     if(dyas1[i]>dya)59                     {60                         mon=i;61                         d=dya-dyas1[i-1];62                         break;63                     }64                     else if(dyas1[i]==dya)65                     {66                         mon=i;67                         d=month[i];68                         break;69                     }70                 }71                 72             }            73             printf("%04d/%02d/%02d\n",yera,mon,d);            74         }75         76     }77     78     return 1;79 }

其他代码:

 1 #include <iostream> 2  3 using namespace std; 4 int isRN(int y) 5 { 6     if((y%4==0&&y%100!=0)||y%400==0) 7     { 8         return 1; 9     }10     return 0;11 }12 int a[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};13 int main()14 {15     int n;16     int y,m,d;17     int s;18     int flag;19     while(cin>>n)20     {21 22         s=0;23         if(n==1)24         {25                 cin>>y>>m>>d;26                 flag=isRN(y);27                 for(int i=1;i<m;++i)28                 {29                     s+=a[flag][i];30                 }31                 s+=d;32                 cout<<s<<endl;33         }34         else if(n==2)35         {36             cin>>y>>s;37             flag=isRN(y);38             m=0;39             do{40                 s-=a[flag][++m];41             }while(s>0);42             d = s+a[flag][m];43             if(m>=10)44             {45                 cout<<y<<"/"<<m<<"/"<<d<<endl;46             }47             else48             {49                 cout<<y<<"/0"<<m<<"/"<<d<<endl;50 51             }52 53         }54 55 56     }57     return 0;58 }

 

武汉科技大学ACM :1010: 华科版C语言程序设计教程(第二版)例题7.8