关于#c++#的问题,请各位专家解答!

求各位帮我看一看如何解决问题

#include 
#include 

using namespace std;

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

bool check(int year)
{
    return year % 400 == 0 || year % 4 == 0 && year % 100 != 0; //闰年2月多一天
}

int get_day(int year, int month)
{
    if (month == 2) return 28 + check(year);
    return days[month];
}

int main()
{
    int n;
    cin >> n;

    string ans1, ans2;  //ans1回文数 ans2为ababbaba形回文数
    bool flag1 = false, flag2 = false; //两个哨兵
    for (int i = n / 10000; i <= 9999; i++) //枚举年份
    {
        char to_string;
        string a = to_string(i); //to_string整转字
        string b = a;
        reverse(b.begin(), b.end()); //反转b
        if (a + b <= to_string(n)) continue; //得到日期需大于输入日期

        int month = stoi(b.substr(0, 2)); //stoi字转整 substr分理出月份和天
        int day = stoi(b.substr(2, 2));
        if (month < 1 || month > 12) continue; //判断是否合法
        if (day < 1 || day > get_day(i, month)) continue;

        string s1 = a.substr(0, 2); //作为判断ababbaba型
        string s2 = a.substr(2, 2);
        if (!flag1) ans1 = a + b, flag1 = true;
        if (!flag2 && s1 == s2 && s1[0] != s1[1]) ans2 = a + b, flag2 = true; //判断ababbaba型

        if (flag1 && flag2) break; //得到两个回文数结束循环
    }

    cout << ans1 << endl;
    cout << ans2 << endl;
    return 0;
}






bug如下

img


增加#include <string>