蓝桥杯模拟赛填空题第三题



#include 
#include 
#include 

using namespace std;

int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

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

int get(int x) {
    int res = 0;
    while(x) {
        res += x % 10;
        x /= 10;
    }
    return res;
}

int work(int y, bool leap) {
    
    int cnt = 0;
    
    for(int i = 1; i <= 12; i ++) {
        int k = days[i];
        if(i == 2 && leap) k ++ ;
        
        for(int j = 1; j <= k; j ++) {
            if(get(y) == get(i) + get(j)) {
                cnt ++ ;
            }
        }
    }
    
    return cnt;
}

int main() {
    
    int res = 0;
    
    for(int y = 1900; y <= 9999; y ++) {
        bool leapY = is_leap(y);
        
        res += work(y, leapY);
    }
    
    cout << res << "\n";
    return 0;
}

想问一下,这段代码的work和gets函数分别有什么作用,写这一段代码的思路是怎么样的,这段代码又是怎么解释的呢。