穷举月和日,构造回文日期,再判断日期的合法性与是否符合范围要求。
#include <iostream> using namespace std; int md[13] = { 0,31,29,31,30,31,30,31,31,30,31,30,31 }; bool check(int date) { int y = date / 10000, m = date % 10000 / 100,d = date % 100; if (!(y / 1000)) return false; if ((m > 12) || (d > md[m])) return false; if ((m == 2) && (d == 29) && !((y % 400==0) || ((y % 4==0)&&(y%100!=0)))) return false; return true; } int main() { int date1 = 0, date2 = 0,count=0; cin >> date1 >> date2; for (int i = 101; i < 10000; i++) { int t = i,date=i,d=1e+7; for (int j = 1; j <= 4; j++) { date += t % 10 * d; t /= 10; d /= 10; } if ((date <= date2) && (date >= date1) && check(date)) count++; } cout << count; return 0; }