标签:
CCC老师的生日是YY年MM月DD日,他想知道自己出生后第一万天纪念日的日期(出生日算第0天)。
从文件的第一行分别读入YY,MM,DD其中1949<=YY<=2006,日期绝对合法。
输出文件只有一行,即CCC老师生日第一万天以后的日期,格式为 “Y-M-D”。
1979 4 16
2006-9-1
题解:坑点在,2月29,1月1,12月31,
代码:#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; #define mem(x,y) memset(x,y,sizeof(x)) #define yea(x) (x%400==0||(x%4==0&&x%100!=0)) int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int getd(int nn,int yy,int rr){ int d=0; if(yea(nn))m[2]=29; for(int i=1;i<yy;i++)d+=m[i]; d+=rr; m[2]=28; // printf("%d\n",d); return d; } int main(){ int N,nn,yy,rr; while(~scanf("%d%d%d",&nn,&yy,&rr)){ int d=10000; m[2]=28; if(yea(nn))d-=(366-getd(nn,yy,rr)); else d-=(365-getd(nn,yy,rr)); int y,mon,r; for(y=nn+1;d>=365;y++){ if(yea(y))d-=366; else d-=365; } if(yea(y))m[2]=29; if(d==0){ y--; mon=12;r=31; } else for(mon=1;mon<13;mon++){ if(d>m[mon])d-=m[mon]; else if(d==m[mon]){ r=m[mon]; break; } else{ r=d; break; } } printf("%d-%d-%d\n",y,mon,r); } return 0; }
标签:
原文地址:http://www.cnblogs.com/handsomecui/p/4981772.html