分析:最容易的方法就是一天一天的模拟了。
#include<iostream> using namespace std; int a[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; #define Y 2013 #define M 3 #define D 24 bool leap(int y) { return y%400==0 || y%4==0&&y%100!=0; } void change(int k,int fg) //-1回到过去,1去到未来 { int y=Y,m=M,d=D; while(k--) { if(leap(y)) a[2]=29; else a[2]=28; d+=fg; if(fg==-1) { if(d<=0) { m+=fg; if(m<=0) { m=12; y+=fg; } d=a[m]; } } else if(fg==1) { if(d>a[m]) { m+=fg; if(m>12) { m=1; y+=fg; } d=1; } } } printf("%04d/%02d/%02d",y,m,d); } int main() { int n,m; scanf("%d",&n); while(n--) { scanf("%d",&m); change(m,1); putchar(' '); change(m,-1); putchar('\n'); } return 0; }
HDU ACM 4515 小Q系列故事——世界上最遥远的距离
原文地址:http://blog.csdn.net/a809146548/article/details/46404687