DreamJudge-1446-日期累加

1.题目介绍

Time Limit: 1000 ms
Memory Limit: 256 mb

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

输入输出格式

输入描述:

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

输出描述:

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

输入输出样例

输入样例#:

1
2008 2 3 100

输出样例#:

2008-05-13

题目来源
北京理工大学机试题

2.题解

2.1 日期计算

思路

这里最容易出错的地方就是在year++后,我们需要重新判断当前年份是否是闰年!!!

代码

#include<bits/stdc++.h>
using namespace std;
vector<int> f{0,31,28,31,30,31,30,31,31,30,31,30,31};
void isLeapYear(int year){
	if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) f[2] = 29;
	else f[2] = 28;
}
class Date{
public:
	int year;
	int month;
	int day;
	Date(int y, int m, int d): year(y), month(m), day(d){};
	void AddDays(int addNum){
		day += addNum;
		while(day > f[month]){
			day -= f[month];
			month++;
			if(month == 13){
				year++;
				isLeapYear(year); // 非常注意!!!!! 
				month = 1;
			}
		}
	}
	void printDate(){
		printf("%4d-%02d-%02d\n", year, month, day);
	}
};

int main(){
	int n;
	cin >> n;
	
	for(int i = 0; i < n; i++){
		int y, m, d, num;
		cin >> y >> m >> d >> num;
		Date date(y, m, d);
		isLeapYear(date.year);
		date.AddDays(num);
		date.printDate();
	}
	return 0;
}
posted @ 2024-06-11 00:05  DawnTraveler  阅读(15)  评论(0)    收藏  举报