题目:
466. 回文日期 - AcWing题库
思路:
1.如果正向考虑,计算两天之间所以的回文数,应该如何枚举?没有明确的进制,那么只能列一个日历,这样会比较麻烦。
2.我们不妨采用逆向思维,将所以8位回文数列出,在其中寻找:
1.在两天之间的
2.满足日期表示规范的
3.统计个数。
注意:枚举8位数回文数时我们只需要枚举前4位,后面翻转得到。
代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int cnt;
int date1, date2;
int month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
bool isprime(int x)
{if (x % 400 == 0 || x % 4 == 0 && x % 100 != 0)return true;else return false;
}bool Is(int n)
{if (n < date1 || n > date2)return false;int day = n % 100;int Month = n % 10000 / 100;if (isprime(n / 10000))month[2] = 29;if (day > 31 || Month==0||Month > 12 || day==0||day > month[Month])return false;month[2] = 28;return true;
}int main()
{cin >> date1 >> date2;for (int i = 1000; i <= 9999; i++) {int t = i; int sum = i; while (t > 0) { sum = sum * 10 + t % 10; t /= 10; }if (Is(sum))cnt++;}cout << cnt;
}