穷举月和日,构造回文日期,再判断日期的合法性与是否符合范围要求。

#include <iostream>
using namespace std;
int md[13] = { 0,31,29,31,30,31,30,31,31,30,31,30,31 };
bool check(int date)
{
    int y = date / 10000, m = date % 10000 / 100,d = date % 100;
    if (!(y / 1000)) return false;
    if ((m > 12) || (d > md[m])) return false;
    if ((m == 2) && (d == 29) && !((y % 400==0) || ((y % 4==0)&&(y%100!=0)))) return false;
    return true;
}
int main()
{
    int date1 = 0, date2 = 0,count=0;
    cin >> date1 >> date2;
    for (int i = 101; i < 10000; i++)
    {
        int t = i,date=i,d=1e+7;
        for (int j = 1; j <= 4; j++)
        {
            date += t % 10 * d;
            t /= 10;
            d /= 10;
        }
        if ((date <= date2) && (date >= date1) && check(date)) count++;
    }
    cout << count;
    return 0;
}