题意


计算起始日期到截止日期中(包括起始和截止日期)有多少个日期是回文日期。


思路


模拟题,方法很多,我这里提供一种。
按天进行模拟,用dx[]数组记录每个月的天数(二月份是例外,这里存下28,模拟时单独进行判断是28还是29),用y、m、d分别表示当前遍历到的年份、月份、天数,当d大于当前月份的天数时,d重置为1,m+1, 当m大于12时,m重置为1,y+1,以此类推。


#include <iostream>
using namespace std;

typedef long long ll;
int dx[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

bool judge_run(int y)
{
    return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0;
}

bool judge_hui(ll res)
{
    ll x = res, y = 0;
    while (x)
    {
        y = y * 10 + x % 10;
        x /= 10;
    }
    return res == y;
}

ll add(int y, int m, int d)
{
    return y * 10000 + m * 100 + d;
}


int main()
{
    ll da1, da2, res = 0;
    cin >> da1 >> da2;
    int y = da1 / 10000, m = (da1 / 100) % 100, d = da1 % 100;
    while (add(y, m, d) <= da2)
    {
        if (judge_hui(add(y, m, d))) res++;
        if (judge_run(y) && m == 2)
        {
            if (d == dx[m] + 1)
            {
                d = 1;
                m++;
            }
            else d++;
        }
        else 
        {
            if (d == dx[m]) 
            {
                d = 1;
                if (m == 12)
                {
                    m = 1, y++;
                }
                else m++;
            }
            else d++;
        }
    }
    cout << res << endl;
    return 0;
}