求各位帮我看一看如何解决问题
#include <iostream>
#include <algorithm>
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如下