建站行业的利润在线服务器网站
方法有挺多的,比如说先枚举日期再判断是不是回文数,或者先枚举回文数再判断日期是否合法等等。
讲一下作者采用的方法。八位数,如果要是回文数,至少应该是ABCDDBCA,A有9种,B、C、D有10种,所以最多只要枚举9*10*10*10个数字就能出答案。
#include<iostream>
using namespace std;
bool DAY(int n) {int year = n / 10000;int month = (n % 10000) / 100;if (month > 12 || month < 1)return false;int day = n % 100;if (day > 31 || day < 1)return false;if (month == 2 || month == 4 || month == 6 || month == 9 || month == 11) {if (day > 30)return false;}int flag = 0;if (year % 100 != 0) {if (year % 4 == 0)flag = 1;}else {if (year % 400 == 0)flag = 1;}if (!flag) {if (month == 2) {if (day > 28)return false;}}return true;
}
int main() {int n;cin >> n;int a = n / 10000000 % 10;int b = n / 1000000 % 10;int c = n / 100000 % 10;int d = n / 10000 % 10;while (1) {int sum = a * 10000000 + b * 1000000 + c * 100000 + d * 10000 + d * 1000 + c * 100 + b * 10 + a;if (sum > n && DAY(sum)) {cout << sum << endl;break;}else {d++;if (d > 9) { d = 0; c++; }if (c > 9) { c = 0; b++; }if (b > 9) { b = 0; a++; }}}while (1) {int sum = a * 10000000 + b * 1000000 + a * 100000 + b * 10000 + b * 1000 + a * 100 + b * 10 + a;if (sum > n && DAY(sum)) {cout << sum << endl;break;}b++;if (b > 9) { b = 0; a++; }}return 0;
}