题目描述
给定一个日期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-31 30
输出
2021-05-01
样例2
输入
2021-05-31 31
输出
2021-04-30
代码:
#include<iostream>
using namespace std;
int monthnum[2][13]{
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
bool isryear(int n){
if(n%400==0||n%4==0&&n%100!=0) return true;
else return false;
}
void addyear(int &year,int &month,int &day){
day--;
if(day<1){
month--;
}
if(month<1){
year--;
month=12;
}
if(day<1){ //为什么日期跟新放最后,因为年和月份可能会变
day=monthnum[isryear(year)][month];
}
}
int main(){
string str;
cin>>str;
int year=0,month=0,day=0;
for(int i=0;i<4;i++){
year=year*10+str[i]-'0';
}
for(int i=5;i<7;i++){
month=month*10+str[i]-'0';
}
for(int i=8;i<10;i++){
day=day*10+str[i]-'0';
}
int n;
cin>>n;
for(int i=0;i<n;i++){
addyear(year,month,day);
}
cout<<year<<"-";
if(month>9) cout<<month<<"-";
else cout<<"0"<<month<<"-";
if(day>9) cout<<day;
else cout<<"0"<<day;
}