AcWing 2867. 回文日期
原题链接
简单
作者:
weiambt
,
2021-03-09 16:49:24
,
所有人可见
,
阅读 264
回文日期
#include<bits/stdc++.h>
using namespace std;
int maxday(int year,int mon){//找到该年该月的天数
switch(mon){
case 2://二月天数取决于是否是闰年
if((year%4==0 && year%100==1)|| year%400==0)
return 29;//闰年29天
else
return 28;//平年28天
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
default:
return 30;
}
}
void print(int y,int m,int d){
cout<<y;
if(m<10)
cout<<"0"<<m;
else
cout<<m;
if(d<10)
cout<<"0"<<d<<endl;
else
cout<<d<<endl;
}
int main(){
int y,m,d;
scanf("%4d%2d%2d",&y,&m,&d);
// cout<<maxday(2020,4);
int flag1=0;
for(int i=y;;i++){
int nm=i%10*10+i/10%10;
int nd=i/100%10*10+i/1000;
if(i>y){//不是同一年
if(nm<=12 && nm>=1 && nd<=maxday(i,nm)){
if(flag1==0){//普通回文
print(i,nm,nd);
flag1=1;
}
if(i/1000==i/10%10 && i/100%10==i%10){//ABAB型
print(i,nm,nd);
break;
}
}
}
else{//同一年
if((nm>m && nm<=12 && nd<=maxday(y,m))|| (nm==m && nd>d && nd<=maxday(y,m))){
if(flag1==0){//普通回文
print(i,nm,nd);
flag1=1;
}
if(i/1000==i/10%10 && i/100%10==i%10 && i/1000 !=i/100%10){//ABAB型
print(i,nm,nd);
break;
}
}
}
}
return 0;
}