题解 | #日期累加#

日期累加

https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d

#include<iostream>
#include<map>
using namespace std;

//例题2.8 日期累加
int isLearYear(int year) {
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
		return 1;
	}
	return 0;
}
int main()
{
	int n;
	cin >> n;
	int y, m, d, num;
	map<int, int> maps = { {1,31},{2,28},{3,31},{4,30},{5,31},{6,30},{7,31},{8,31},{9,30},{10,31},{11,30},{12,31} };
	for (int i = 0; i < n; i++) {
		cin >> y >> m >> d >> num;
		num += d;
		d = 0;
		while (num >= 365) {
			if (isLearYear(y + 1) == 1 && num >= 366) {
				y += 1;
				num -= 366;
			}
			if (isLearYear(y + 1) == 0 && num >= 365) {
				y += 1;
				num -= 365;
			}
		}
		int k = 0;
		for (k = m; k <= 12; k++) {
			if (isLearYear(y) == 1 && k == 2 && num >= 29) {
				num -= (maps[k] + 1);
			}
			else if (num > maps[k]) {
				num -= maps[k];
			}
			else {
				break;
			}
			if (k == 12 && num > 0) {
				k = 0;
				y += 1;
			}
		}
		printf("%d-%02d-%02d\n", y, k, num);
		
	}

	return 0;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务