首先,题目要求求出所给两个日期间(包括所给日期在内)的回文数个数

第一反应想到枚举出每个日期,判断是否为回文数,但计算量过大,很可能导致时间超限。

于是考虑优化:
将月和日枚举,补出相应形成回文数的年,判断形成数字是否在所给日期之间。

开始解题:
看到年月日的整段输入,首先想到的是用字符串类型处理,但不方便分离月日,补出年份,因此重新考虑用整数类型读入;另外,月份可设常数数组简化程序(关于二月日期的讨论,考虑到二月为29天时只有92200229满足,且9220年为闰年,因此该日期成立,故将二月日期在数组内设为29天)于是易写出程序。

程序:
#include<iostream>
using namespace std;
int main()
{
int z=0;
int b,e,i,j,x,q;
int a[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
cin>>b>>e;
for (i=1;i<=12;i++)
{
for (j=1;j<=a[i];j++)
{
q=j%101000+j/10100+i%1010+i/10;
x=q
10000+i*100+j;
if (x>=b&&x<=e) z++;
}
}
cout<<z;
return 0;
}</iostream>