AcWing 2867. 回文日期
原题链接
简单
作者:
小王子_19
,
2024-04-03 20:51:53
,
所有人可见
,
阅读 1
C++ 代码 (这题想要做对,确实需要仔细加细心)
#include <cstdio>
#include <iostream>
using namespace std;
int n, m;
int leap = 0;
int swap(int len, int number)
{
int x = number;
for (int i = 0; i < len; i ++ )
number = number * 10 + x % 10, x /= 10;
return number;
}
bool check(int x)
{
int year = x / 10000;
x = x % 10000;
int month = x / 100;
int day = x % 100;
if (year % 400 == 0 || year % 100 != 0 && year % 4 == 0) leap = 1;
if (month < 1 || month > 12) return false;
else
{
if (month == 2 && day > 28 + leap) return false;
if ((month == 4 || month == 6 || month == 9 || month == 11) && day > 30) return false;
else if (day > 31) return false;
}
return true;
}
int main()
{
scanf("%04d%04d", &n, &m);
int a = n * 10000 + m;
int val = 0;
for (int i = n; i <= 9999; i ++ )
{
val = swap(4, i);
if (val > a && check(val)) break;
}
cout << val << endl;
for (int i = val / 10000; i <= 9999; i ++ )
{
int p = i / 100, q = i % 100;
int c = p / 10, d = p % 10;
if (p == q && c != d)
{
int ans = swap(4, i);
if (check(ans))
{
cout << ans << endl;
break;
}
}
}
return 0;
}