标签:int,天数,31,month,晴问,入门篇,日期,year,day From: https://blog.csdn.net/weixin_59725175/article/details/136988657题目描述
给定一个日期DAY和一个正整数n,求日期DAY加上n天后的日期。
输入描述
第一行为给定的日期DAY(格式为YYYY-MM-DD,范围为1900-01-01<DAY≤2199-12-31),数据保证一定合法;
第二行为需要增加的天数n (1≤n≤10000)。
输出描述
以YYYY-MM-DD的格式输出增加了n天后的日期。
样例1
输入
2021-05-0130
输出
2021-05-31
样例2
输入
2021-05-0131
输出
2021-06-01#include <bits/stdc++.h> using namespace std; const int MAXN = 100; int f[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};//存月份天数,为什么开辟13呢,让f[0]=0,使数组下标和月份一一对应 struct data{//涉及到日期的都定义结构体 int year; int month; int day; }; int main() { struct data p;//data类型的p变量 scanf("%04d-%02d-%02d",&p.year,&p.month,&p.day);//按照题目的格式输入04d表示年份占四位 int n;//增加的天数 cin >> n; if((p.year / 4 == 0 && p.year % 100 != 0) || (p.year % 400 == 0)){//先判断是否闰年 f[2] = 29;//闰年的话二月是29天 }else{ f[2] = 28;//否则二月是28天 } if(p.day + n > f[p.month]){//如果增加的天数大于该月的天数 p.month += 1;//月份加一,到下一个月 p.day = 1;//并且天数置为1 }else{ p.day = p.day + n;//如果没超出该月,就直接加到天数 } if(p.month > 12){//月份超过12月不符合 p.year += 1;//所以就到了下一年 p.month = 1;//同样月份置1从头计数 } printf("%04d-%02d-%02d",p.year,p.month,p.day);//按照格式要求输出 return 0; }