算法笔记练习 3.4 日期处理 问题 E: 日期累加

算法笔记练习 题解合集

本题链接

题目

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

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

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

样例输入

1
2008 2 3 100

样例输出

2008-05-13

思路

和上一题类似,一天天加上去,该进位的时候记得进位即可。

代码

#include 

const int common[12] 	= {31,28,31,30,31,30,31,31,30,31,30,31};
const int leap[12] 		= {31,29,31,30,31,30,31,31,30,31,30,31};

int isLeap(int n) {
	int yes = 0;
	if (!(n % 400))
		yes = 1;
	else if (!(n % 100))
		yes = 0;
	else if (!(n % 4))
		yes = 1;
	else
		yes = 0;
	return yes;
} 

int main() {
	int T;
	scanf("%d", &T);
	while (T--) {
		int y, m, d, day;
		scanf("%d %d %d %d", &y, &m, &d, &day);
		while (day--) {
			if(m == 12 && d == 31){
				y++;	m = 1;	d = 1;
			} else if ( isLeap(y) && m == 2 && d == 29) {
				m++;	d = 1;
			} else if (!isLeap(y) && m == 2 && d == 28) {
				m++;	d = 1;
			} else if ((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 ) && d == 31) {
				m++;	d = 1;
			} else if ((m == 4 || m == 6 || m == 9 || m == 11 ) && d == 30) {
				m++;	d = 1;
			} else {
				d++;
			} 
		}
		printf("%04d-%02d-%02d\n", y, m, d);
	} 
	return 0;
}

你可能感兴趣的:(算法笔记)