[NOIP2016普及组T2] 回文日期
满分程序
*/
#include <iostream>
using namespace std;
bool is_run(int year) //是否为闰年
{
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
bool is_hui_wen(int d) //是否为回文,只有8位就没有用递归算法
{
return (d / 10000000 == d % 10) && (d / 1000000 % 10 == d % 100 /10) && (d / 100000 % 10 == d % 1000 /100) && (d / 10000 % 10 == d % 10000 /1000);
}
int days_in_month(int year,int month) //每月有多少天
{
static int days[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int tian;
if (month!=2)
tian = days[month];
else {
if (is_run(year))
tian = days[month] + 1;
else
tian = days[month];
}
return tian;
}
int main()
{
int date1,date2;
int count = 0;//回文日期个数
cin >> date1 >> date2;
bool flag = false; //当到达结束日期date2时flag为true
for (int y = date1 / 10000; ;y++) {
if (flag == true) break;
for (int m = 1;m <= 12;m++) {
if (flag == true) break;
int tian; //每月有多少天
tian = days_in_month(y,m);
for (int d = 1;d <= tian;d++){
int day = y * 10000 + m * 100 + d;
if (day > date2) {
flag = true;
break;
}
if (is_hui_wen(day))
count ++;
}
}
}
cout << count;
return 0;
}