游客 Signup | Login
中文 | En

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;
}

Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题