带注释代码80分过subtask#1求调

P2010 [NOIP2016 普及组] 回文日期

F_L_Bird @ 2024-08-06 16:22:32

代码如下

#include<string>
#include<iostream>
using namespace std;

int get_next_day(int n){
    int y = n / 10000;
    int m = n % 10000 / 100;
    int d = n % 100;
    if(((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10) && d == 31) || ((m == 4 || m == 6 || m == 9 || m == 11) && d == 30))    //非二月跨月
    {
        return y * 10000 + (m + 1) * 100 + 1;
    }
    else if(m == 2) //二月跨月
    {
        if((y % 4 == 0 && y % 100 != 0 || y % 400 == 0) && d == 29 || d == 28)  //闰年29日或平年28日跨月
        {
            return y * 10000 + (m + 1) * 100 + 1;
        }
    }
    if(m == 12 && d == 31)      //十二月跨年
    {
        return (y + 1) * 10000 + 100 + 1;
    }
    else        //看着落日猛然发现又过了一天
    {
        return y * 10000 + m * 100 + d + 1;
    }
    return 0;
}

bool check(int i){      //检查是否为回文
    string s = to_string(i);
    for(int i = 0;i < s.length() / 2;i += 1)
    {
        if(s[i] != s[s.length() - i - 1])
        {
            return false;
        }
    }
    return true;
}

int main(){
    int date1,date2;
    long long ans = 0;
    cin>>date1>>date2;
    while(date1 <= date2)
    {
        if(check(date1))
        {
            ans += 1;
        }
        date1 = get_next_day(date1);
    }
    cout<<ans<<endl;
    return 0;
}

请各位dalao指点迷津qwq


|