不用写字符串比较的函数,找到该年份,直接将年份数字反过来就是对应日期,如果用两层for找意义不大,核心就是判断边界的长难句和基础知识

//https://ac.nowcoder.com/acm/problem/16438
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int  maxn = 2e5;
int mon[13] = { -1,31,28,31,30,31,30,31,31,30,31,30,31 };

bool judYear(int x) {
    return x % 4 == 0 && x % 100 != 0 || x % 400 == 0;//闰年判断
}

int s_month(int x) {
    return (x % 10) * 10 + (x % 100 - x % 10) / 10;
}
int s_date(int x) {
    return x / 1000 + (x % 1000 - x % 100) / 10;
}

bool jud(int y, int m, int d,int md1,int md2,int y1,int y2) {
  //md为开始的年份月份,如果开始在20211201,找的是20211102,这显然不合理,所以有26行和27行长难句,也可以拆开
    int cnt = mon[m];
    if (judYear(y) && m == 2)cnt++;
    if (!(1 <= m && 12 >= m))return false;
    if (!(1 <= d && cnt >= d))return false;
    if ((y==y1&&(md1/100)>m)||(y==y1&&md1/100==m&&(md1%100)<d))return false;
    if ((y==y2&&(md2/100)<m)||(y==y2&&md2/100==m&&(md2%100)>d))return false;
    return true;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int y1,md1,y2,md2;
  //用格式%4d规定输入减少开始的转化
    scanf("%4d%4d",&y1,&md1);
    scanf("%4d%4d",&y2,&md2);

    int ans = 0;
    for (int i = y1; i <= y2; ++i) {
        if (jud(i, s_month(i), s_date(i),md1,md2,y1,y2)) {
            ans++;
        }
    }
    cout << ans << endl;

    return 0;
}