北大2080、杭电1076关于日期处理的问题
北大第2080题http://poj.org/problem?id=2080
问题大意是,给你一个数(n),然后从2000年1月1日起,输出n天后是哪一年,几月几号,星期几。
#include<stdio.h> int rm[]={31,29,31,30,31,30,31,31,30,31,30,31}; //闰年 int pm[]={31,28,31,30,31,30,31,31,30,31,30,31}; //平年 int isp(int year) { if((year%4==0&&year%100!=0)||year%400==0) return 1; return 0; } int main() { int y,m,n,d,dd,day; while(scanf("%d",&n)!=EOF) { if(n==-1)break; y=2000,m=0,day=n; while(n>=(isp(y)?366:365)) { n=n-(isp(y)?366:365); y++; } while(n>=(isp(y)?rm[m]:pm[m])) { n=n-(isp(y)?rm[m]:pm[m]); m=(m+1)%12; } d=n%(isp(y)?rm[m]:pm[m])+1; m=m+1; printf("%d",y); m<10?printf("-0%d",m):printf("-%d",m); d<10?printf("-0%d",d):printf("-%d",d); dd=day%7; switch(dd) { case 0 : printf(" Saturday\n");break; case 1 : printf(" Sunday\n");break; case 2 : printf(" Monday\n");break; case 3 : printf(" Tuesday\n");break; case 4 : printf(" Wednesday\n");break; case 5 : printf(" Thursday\n");break; case 6 : printf(" Friday\n");break; } } return 0; }
杭电上第1076题http://acm.hdu.edu.cn/showproblem.php?pid=1076
问题大意是,给你一个年份(year),和一个数(n),从该year开始,期间经过n过平年后是哪个年份。
#include<stdio.h> int main() { int year,n,m,y,count; //y:起始年 scanf("%d",&n); while(n--) { count=0; scanf("%d%d",&y,&m); for(year=y;;year++) { if((year%4==0&&year%100!=0)||year%400==0) { count++; } if(m==count){ printf("%d\n",year); break; } } } return 0; }