上海计算机学会2021年3月月赛C++丙组T1疫苗接种
发布时间
阅读量:
阅读量
题目描述
小爱前去接种疫苗,注射完第一剂后,医生告诉她过 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;
}
全部评论 (0)
还没有任何评论哟~
