C++ 遍历年份、注意月份和日期取值范围即可

#include <iostream>
using namespace std;

int main() {
    string a, b;
    cin >> a >> b;
    // YYYYMMDD
    // [0-9][1-3][1-9|1-2][0|1][0|1][1-9|1-2][0-2|3][0-9]
    // a[0:3]-b[0:3] 不可以用 &(a[0], a[4])
    int y1=atoi(a.substr(0,4).c_str()), y2=atoi(b.substr(0,4).c_str());
    // cout << y1 << ' ' << y2 << endl;
    int cnt=0;
    for (int i=y1; i<=y2; i++) {
        int r=0;
        if (i%400==0 || i%4==0&&i%100!=0) r++;
        int m1=i%10, m2=i/10%10, d2=i/1000, d1=(i-d2*1000)/100; // m1 m2 d1 d2
        int m=m1*10+m2, d=d1*10+d2;
        // cout << i << ' ' << m << ' ' << d << endl;
        if (m==2 && d>0 && d<29+r) {
            cnt++;
        } else if (m>0 && m<13) {
            if ((m==1||m==3||m==5||m==7||m==8||m==10||m==12) && d>0 && d<32) {
                cnt++; 
            } else if ((m==4||m==6||m==9||m==11) && d>0 && d<31) {
                cnt++; 
            }
        }
    }
    cout << cnt << endl;
}
// 64 位输出请用 printf("%lld")