问题 E: 日期累加
时间限制 : 1.000 sec 内存限制 : 32 MB
解决 : 686 提交 : 1281题目描述
设计一个程序能计算一个日期加上若干天后是什么日期。
输入
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。
输出
输出m行,每行按yyyy-mm-dd的个数输出。
样例输入
1 2008 2 3 100样例输出
2008-05-13
可以看看这篇文章:【纯干货】超全! 计算天数、计算星期几等日期问题 一文炖!
此题就是在codeup 2026 | 日期类这题上改一点点...
思路很简单:从输入的日期开始往后推n天即可。
注意:需要用conut记录往后推了几天,在每后推一天时,count++,直到达到n。
就不细说啦,具体代码如下:
//
// Created by LittleCat on 2020/2/2.
//
#include <cstdio>
/* 平年和闰年每个月的天数 */
int month[13][2] = {
{0, 0}, {31, 31}, {28, 29}, {31, 31}, {30, 30}, {31, 31}, {30, 30},
{31, 31}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}
};
/* 判断y年是否为闰年
* 是 则返回1 ; 否 则返回0 */
int isLeapYear(int y) {
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
return 1;
return 0;
}
int main() {
int n;
while (EOF != scanf("%d\n", &n)) {
int y, m, d, days;
for (; n; n--) {
scanf("%d %d %d %d", &y, &m, &d, &days);
int count = 0;
while (count < days) {
d++; //天数进1
/* 当月天数已满 */
if(d == month[m][isLeapYear(y)] + 1) {
d = 1;
m++;
}
/* 月份数已满 */
if(m == 13) {
y++;
m = 1;
}
count++;
}
printf("%04d-%02d-%02d\n", y, m, d);
}
}
}
end
欢迎关注个人公众号“ 鸡翅编程 ”,这里是认真且乖巧的码农一枚。
---- 做最乖巧的博客er,做最扎实的程序员 ----
旨在用心写好每一篇文章,平常会把笔记汇总成推送更新~