枚举和模拟 下 习题
03 日期累加
描述
设计一个程序能计算一个日期加上若干天后是什么日期。
输入描述
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。
输出描述
输出m行,每行按yyyy-mm-dd的个数输出。
示例1
输入:
1
2008 2 3 100
输出:
2008-05-13
解答
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
using namespace std;
//求当前天数的下一天的年月日
void NextDay(int& year, int& month, int& day) {
int dayOfMonth[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
//给一个年份 判断是不是闰年
//1 可以被100整除 也可以被400整除 是闰年
//2 不能被100整除 但是可以被4整除 是闰年
//判断是不是闰年
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
//此处 逻辑&&的优先级高于逻辑||
dayOfMonth[2] = 29;
}
else {
dayOfMonth[2] = 28;
}
day++;
//看加完以后的天数 有没有超过这个月的上限值
if (day > dayOfMonth[month]) {
day = 1;//日回归到1
month++;//月份往后走了一个月
}
//看加完以后的月数 有没有超过月份的上限值
if (month > 12) {
month = 1;
year++;
}
}
int main() {
int m;
scanf("%d", &m);
for (int i = 0; i < m; i++) {
int curyear, curmonth, curday, total;
int next = 0;//已经走了多少天
scanf("%d%d%d%d", &curyear, &curmonth, &curday, &total);
while (next < total) {
NextDay(curyear, curmonth, curday);
next++;
}
printf("%04d-%02d-%02d\n", curyear, curmonth, curday);
}
return 0;
}