题目描述
输入一个日期,计算这个日期前一天和后一天的日期。
输入
输入三个整数 y,m,d分别表示年月日 (1000≤y≤3000,1≤m≤12, 日期必合法)
输出
第一行输出三个用空格分隔的整数,表示前一天的年月日。
第二行输出三个用空格分隔的整数,表示后一天的年月日。
#include <stdio.h>
int main(){
int y,m,d;
scanf("%d%d%d", &y, &m, &d);
int y1 = y, y2 = y;
int m1 = m, m2 = m;
int d1 = d, d2 = d;
//前一天
if (m == 3 && d == 1){
if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0){
m1--;
d1 = 29;
}
else {
m1--;
d1 = 28;
}
}
else if (m == 1 && d == 1) {
y1--;
m1 = 12;
d1 = 31;
}
else if ((m == 5 || m == 7 || m == 10 || m == 12) && d == 1) {
m1--;
d1 = 30;
}
else if ((m == 2 || m == 4 || m == 6 || m == 8 || m == 9 || m == 11) && d == 1){
m1--;
d1 = 31;
}
else {
d1--;
}
printf("%d %d %d\n", y1, m1, d1);
//后一天
if (m == 2){
if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0){
if(d == 29){
m2++;
d2 = 1;
}
else{
d2++;
}
}
else{
if (d == 28) {
m2++;
d2 = 1;
}
else{
d2++;
}
}
}
else if ((m == 4 || m == 6 || m == 9 || m == 11) && d == 30) {
m2++;
d2 = 1;
}
else if ((m == 1 || m == 3 || m == 5 || m ==7 || m ==8 || m == 10) && d == 31) {
m2++;
d2 = 1;
}
else if (m == 12 && d == 31) {
y2++;
m2 = 1;
d2 = 1;
}
else{
d2++;
}
printf("%d %d %d\n",y2, m2, d2);
return 0;
}