1617 - 日期累加
设计一个程序能计算一个日期加上若干天后是什么日期。
Input
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。
Output
输出m行,每行按yyyy-mm-dd的个数输出。
Examples
Input
1 2008 2 3 100
Output
2008-05-13
Solution C
#include<stdio.h> int num[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 }; int main(){ int m; int year,month,day; int n; int leap; scanf("%d",&m); while(m--){ scanf("%d%d%d%d",&year,&month,&day,&n); leap = 0; if((year%400==0)||(year%4==0&&year%100!=0)){ leap = 1; } while(n){ day++; if(day>num[leap][month]){ day = 1; month++; } if(month>12){ month = 1; year++; leap = 0; if((year%400==0)||(year%4==0&&year%100!=0)){ leap = 1; } } n--; } printf("%04d-%02d-%02d\n",year,month,day); } return 0; }
Solution C++
#include <cstdio> int f[13] = {0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool check(int y) { if (y % 100 == 0) return y % 400 == 0; else return y % 4 == 0; } int main() { //freopen("test.in", "r", stdin); //freopen("test.out", "w", stdout); int t; scanf("%d", &t); while (t--) { int y, m, d, x; scanf("%d %d %d %d", &y, &m, &d, &x); f[2] = 28 + check(y); d += x; while (d > f[m]) { d -= f[m]; ++m; if (m > 12) { m = 1; ++y; f[2] = 28 + check(y); } } printf("%04d-%02d-%02d\n", y, m, d); } return 0; }