[NOIP2016 普及组] 回文日期

枚举年份,从\(1000\)枚举到\(9999\),构造回文日期,判断是否在给定日期范围内,以及判断日期是否合法。

int month[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
int st,ed;

bool isLeap(int year)
{
    return (year % 4 == 0 && year % 100) || year % 400 == 0;
}

bool check(int date)
{
    if(date > ed || date < st) return false;

    int yy=date/10000,mm=date%10000/100,dd=date%100;
    bool isleap=isLeap(yy);
    if(mm == 0 || mm > 12) return false;
    if(dd == 0 || dd > month[isleap][mm]) return false;
    return true;
}

int main()
{
    cin>>st>>ed;

    int res=0;
    for(int i=1000;i<10000;i++)
    {
        int date=i,t=i;
        while(t)
        {
            date=date*10+t%10;
            t/=10;
        }

        if(check(date)) res++;
    }
    cout<<res<<endl;
    //system("pause");
    return 0;
}
posted @ 2021-03-25 19:29  Dazzling!  阅读(42)  评论(0编辑  收藏  举报