从当前输入的串开始,判断后面的每个回文串是不是正常日期,是不是ABABBABA式串
//回文日期
#include<iostream>
//#include<algorithm>
//#include<bits/stdc++.h>
using namespace std;
int m[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//每个月份的天数
bool check(int x)//判断该串数字是否是日期
{
int year = x / 10000;//年
int month = x % 10000 / 100;//月
int day = x % 100;//日
if(month>12||day>31)//月份超过12或者天数超过31,不是正常日期
return false;
if((year%4==0&&year%100!=0)||year%400==0)//判断是闰年还是平年
m[1] = 29;//闰年二月份有29天
else
m[1] = 28;//平年二月份有28天
if(day>m[month-1])//判断天数是不是超过该月份的天数
return false;
return true;//所有条件都满足,是正常日期
}
int main()
{
int n;
cin >> n;
int lst[10];//暂时保存拆分后的数字
int flag = 0;//用于标记是否是最近的回文日期
for (int x = n / 10000;;x++)
{
int sum = 0;//用于临时保存重组后的串
for (int k = x,i=3,j=4; k != 0;k/=10,i--,j++)//转换成数字数组
{
lst[i] = k % 10;
lst[j] = lst[i];
}
for (int i = 0; i < 8;i++)//转换成一个整数
sum = sum * 10 + lst[i];
if(flag==0&&check(sum)&&sum>n)//判断这串数字是否大于n,且是否是正常日期,是否是最近的回文日期
{
cout << sum << endl;
flag++;//标记已经找到过回文日期
}
//判断是否是正常日期,ABABBABA式串,是否大于n
if(check(sum)&&(x/1000==x%100/10)&&(x/100%10==x%10)&&sum>n)
{
cout << sum << endl;
break;//结束循环
}
}
system("pause");
return 0;
}
测评系统全部通过