题解 | 日期累加

#include <iostream>
#include <cstdio>

using namespace std;

int years[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} };

bool IsLeapYear(int year) {
	return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

int NumberOfYear(int year) {
	if (IsLeapYear(year)) {
		return 366;
	}
	else {
		return 365;
	}
}

int main() {
	int year, month, day;
	int number, Casenumber;
	cin >> Casenumber;
	while (Casenumber--) {
		cin >> year >> month >> day>>number;
		int row = IsLeapYear(year);
		while (month) {
            month--;
			number += years[row][month];
		}
		number+= day;
		while (number > NumberOfYear(year)) {
			number -= NumberOfYear(year);
			year++;
		}
        row = IsLeapYear(year);
		while (number>years[row][month]) {
			number -= years[row][month];
			month++;
		}
		day = number;
		printf("%04d-%02d-%02d\n", year, month, day);
	}
	return 0;
}

全部评论
点赞 回复 分享
发布于 02-07 16:52 台湾

相关推荐

vip牛牛:测试吧,开发现在至少212
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务