1617 - 日期累加

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

设计一个程序能计算一个日期加上若干天后是什么日期。

题目输入

输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。

题目输出

输出m行,每行按yyyy-mm-dd的个数输出。

输入/输出样例

输入格式

1
2008 2 3 100

输出格式

2008-05-13

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

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

Python解答

# coding=utf-8
import datetime
Date = datetime.datetime

m = int(input())
for _ in range(m):
    daystr = input().split()
    date = Date.strptime(' '.join(daystr[:3]), "%Y %m %d")
    delta = datetime.timedelta(days=int(daystr[3]))
    new_date = date + delta
    print(new_date.strftime("%Y-%m-%d"))