题目
- 原题地址:回文日期
- 题目编号:NC16438
- 题目类型:枚举
- 时间限制:C/C++ 1秒,其他语言2秒
- 空间限制:C/C++ 262144K,其他语言524288K
1.题目大意
2.题目分析
- 直接按照年份枚举,判断回文日期是否合法、是否在起止时间内即可
3.题目代码
#include 
using namespace std;
int f[13];
int func(int a)
{
    int  b, c, d, e;
    b = a%10;
    c = a/10%10;
    d = a/100% 10;
    e = a/1000%10;
    a = a*10000 + b*1000 + c*100 + d*10 + e;
    return a;
}
bool judege(int b)
{
    int y = b/10000;
    b %= 10000;
    int m, d;
    m = b/100;
    d = b%100;
    if(m>12||d>31||m==0)
        return false;
    else
    {
        if(m==2)
        {
            if((y%4==0&&y%100!=0)||y%400==0)
                if(d>=1&&d<=29)
                    return true;
                else
                    return false;
            else
                if(d>=1&&d<=28)
                    return true;
                else
                    return false;
        }
        else
        {
            f[4] = f[6] = f[9] = f[11] = 1;
            if(f[m])
                if(d>=1&&d<=30)
                    return true;
                else
                    return false;
            else
                if(d>=1&&d<=31)
                    return true;
                else
                    return false;
        }
    }
}
int main() {
    int a, b;
    cin >> a >> b;
    int ans = 0;
    int a1, b1;
    a1 = a/10000;
    b1 = b/10000;
    int tmp;
    for(int i=a1;i<=b1;i++)
    {
        tmp = func(i);
        if(judege(tmp)&&tmp>=a&&tmp<=b)//起止时间内合法的回文日期
            ans++;
    }
    cout << ans << endl;
}