1 条题解

  • 0
    @ 2026-9-30 12:45:37

    C++ :

    
    #include <cstdio>
    int mdays[] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
    int isLeap(int y){ return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0; }
    /* 由 8 位回文串 abc d dcba 推回日期:年份 = 前4位,月 = 后2位,日 = 前2位(倒序) */
    int main(){
        int d1, d2;
        if(scanf("%d %d", &d1, &d2) != 2) return 0;
        int y1 = d1 / 10000, y2 = d2 / 10000;
        int cnt = 0;
        for(int y = y1; y <= y2; y++){
            /* 回文格式:y(4位) + M(2位) + D(2位),其中后4位是前4位的反转
               设 y 的四位是 a b c d,则整体为 a b c d d c b a
               月份 = d c(十位 d、个位 c),日期 = b a */
            int a = y / 1000, b = y / 100 % 10, c = y / 10 % 10, d = y % 10;
            int mon = d * 10 + c, day = b * 10 + a;
            if(mon < 1 || mon > 12) continue;
            int md = mdays[mon];
            if(mon == 2 && !isLeap(y)) md = 28;
            if(day < 1 || day > md) continue;
            int val = y * 10000 + mon * 100 + day;
            if(val >= d1 && val <= d2) cnt++;
        }
        printf("%d\n", cnt);
        return 0;
    }
    
    
    • 1

    信息

    ID
    2716
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者