问题描述
2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。
因为如果将这个日期按 yyyymmdd 的格式写成一个8位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。
有人表示 20200202 是“千年一遇”的特殊日子。
对此小明很不认同,因为不到2年之后就是下一个回文日期:20211202即2021年12月2日。
也有人表示20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。
对此小明也不认同,
因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即2121年12月12日。算不上“千年一遇”,顶多算“千年两遇”。
给定一个8位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
输入格式
输入包含一个八位整数 N,表示日期。
输出格式
输出两行,每行1个八位数。
第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。
ABABBABA
ABABBABA
样例输入
20200202
样例输出
20211202
21211212
评测用例规模与约定
对于所有评测用例,10000101 \le N \le 89991231, 保证 N 是一个合法日期的 8 位数表示。
#include <stdio.h>
#include <stdlib.h>
void shuchu(char []);
void outrq(int );
int shiABAB(int );
int hefa(int ,int ,int );
int main(void)
{
char str[9] ;
gets(str);
shuchu(str);
return 0;
}
void outrq(int s)
{
printf("%d",s);
while ( s > 0 )
{
printf("%d",s%10);
s /= 10 ;
}
putchar('\n');
}
int shiABAB(int s)
{
if ( s / 100 == ( s % 100 ) && ( s / 1000 != (s / 100) % 10 ))
{
return 1 ;
}
return 0 ;
}
int hefa(int s,int a,int b)
{
int t = s , w = 0 ;
while ( t > 0 )
{
w *= 10 ;
w += t % 10 ;
t /= 10 ;
}
if ( s == a && w <= b )
{
return 0 ;
}
int yue = 0 , ri = 0 ;
yue += ( s % 10) * 10 + ( (s / 10) % 10 ) ;
ri += ( (s / 100) % 10 ) * 10 + ( s / 1000) ;
if ( yue > 12 || yue == 0 )
{
return 0 ;
}
if ( ri > 31 || ri == 0 )
{
return 0 ;
}
if ( yue == 1 && ri <= 31 )
{
return 1 ;
}
if ( (s % 4 == 0 && s % 100 != 0 )|| s % 400 == 0 )
{
if ( yue == 2 && ri <= 29 )
{
return 1 ;
}
}
else
{
if ( yue == 2 && ri <= 28 )
{
return 1 ;
}
}
if ( yue == 3 && ri <= 31 )
{
return 1 ;
}
if ( yue == 4 && ri <= 30 )
{
return 1 ;
}
if ( yue == 5 && ri <= 31 )
{
return 1 ;
}
if ( yue == 6 && ri <= 30 )
{
return 1 ;
}
if ( yue == 7 && ri <= 31 )
{
return 1 ;
}
if ( yue == 8 && ri <= 31 )
{
return 1 ;
}
if ( yue == 9 && ri <= 30 )
{
return 1 ;
}
if ( yue == 10 && ri <= 31 )
{
return 1 ;
}
if ( yue == 11 && ri <= 30 )
{
return 1 ;
}
if ( yue == 12 && ri <= 31 )
{
return 1 ;
}
return 0 ;
}
void shuchu(char a[])
{
int q = 0 , p = 0 ;
int i ;
for ( i = 0 ; i < 4 ; i ++ )
{
q *= 10 ;
q += a[i] - '0' ;
}
for ( i = 4 ; i < 8 ; i ++ )
{
p *= 10 ;
p += a[i] - '0' ;
}
int t = 1 , z = 1 ;
for ( i = q ; i <= 9999 ; i ++ )
{
if ( t == 1 )
{
if ( hefa(i,q,p) )
{
outrq(i);
t = 0 ;
}
}
if ( hefa(i,q,p) && shiABAB(i) &&z == 1 )
{
outrq(i);
z = 0 ;
break;
}
}
}