历届试题 回文日期
又是喜闻乐见的日期题。
枚举年份,构造回文日期和ABABBABA
型的回文日期,判断构造出的日期是否合法。
注意构造出的日期不能和当前日期相等。
int month[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 isLeap(int year)
{
return year % 4 == 0 && year % 100 || year % 400 == 0;
}
bool check(int yy,int mm,int dd)
{
if(mm == 0 || mm > 12) return false;
if(dd == 0 || dd > month[isLeap(yy)][mm]) return false;
return true;
}
int main()
{
int n;
cin>>n;
int yy=n/10000,mm=n%10000/100,dd=n%10000%100;
for(int i=yy;i<10000;i++)
{
int t=i,res=0;
while(t)
{
res=res*10+t%10;
t/=10;
}
int yy=i,mm=res/100,dd=res%100;
int m=yy*10000+mm*100+dd;
if(m != n && check(yy,mm,dd))
{
printf("%d%02d%02d\n",yy,mm,dd);
break;
}
}
for(int i=yy/100;i<100;i++)
{
int t=i*100+i,res=0;
while(t)
{
res=res*10+t%10;
t/=10;
}
int yy=i*100+i,mm=res/100,dd=res%100;
int m=yy*10000+mm*100+dd;
if(m != n && check(yy,mm,dd))
{
printf("%d%02d%02d\n",yy,mm,dd);
break;
}
}
//system("pause");
return 0;
}