题目描述
小爱前去接种疫苗,注射完第一剂后,医生告诉她过 14 天后再来注射第二剂。给定接种第一剂疫苗的日期(以年-月-日表示),请输出注射第二剂的日期。
输入格式
若干字符:表示接种第一剂疫苗的日期。以 y-m-d
的形式表示,其中 y 表示年份、m 表示月份、d 表示天数。保证输入是一个有效的日期。
输出格式
若干字符:表示接种第二剂疫苗的日期,同样以 y-m-d
的形式表示。
数据范围
- 2000≤y≤3000
- 1≤m≤12
- 1≤d≤31
样例数据
输入:
2021-3-12
输出:
2021-3-26
题解
本题关键点:
1.字符串输入,根据'-'截取年月日,并转换成整数。
2.判断输入月份共有几天,里面包含闰年的判断和大小月的判断 。
3.判断是否大于本月的天数。
4.判断是否过了本年 。
代码如下。
#include <iostream>
#include <string>
using namespace std;
int main() {int y, m, d;string s;cin>>s;y=(s[0]-'0')*1000+(s[1]-'0')*100+(s[2]-'0')*10+(s[3]-'0');if(s[6]!='-'){m=(s[5]-'0')*10+(s[6]-'0');if(s.size()==9){d=s[8]-'0';}else{d=(s[8]-'0')*10+(s[9]-'0');}}else{m=s[5]-'0';if(s.size()==8){d=s[7]-'0';}else{d=(s[7]-'0')*10+(s[8]-'0');}}//判断输入月份共有几天 int day=31;if (m == 4 || m == 6 || m == 9 || m == 11) {day = 30;} else if(m == 2) {if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {day = 29;} else{day=28; } }d+=14;//判断是否大于本月的天数 if (d > day) {m++;d -= day;}//判断是否过了本年 if (m > 12) {m = 1;y++;}cout<<y<<"-"<<m<<"-"<<d<<endl;return 0;
}