回文日期
作者:
巷港
,
2022-02-16 17:05:08
,
所有人可见
,
阅读 204
#include <iostream>
#include <cstdio>
using namespace std;
int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check1(int n) //判断日期是否合法
{
int year=n/10000;
int month=n%10000/100;
int day=n%100;
if (month<=0||month>12) return false;
if (day<=0) return false;
if (month!=2)
{
if (day>months[month]) return false;
}
else
{
int leap=(year%4==0&&year%100!=0||year%400==0);
if (day>28+leap) return false;
}
return true;
}
int main()
{
int date1,date2;
scanf("%d%d",&date1,&date2);
int ans=0;
for (int i=1000;i<=9999;i++) //由于回文日期是左右对称的,因此只需要枚举前4位的情况即1000~9999
{
int new1=i,t=i; //构造回文日期
for (int j=0;j<4;j++) new1=new1*10+t%10,t/=10;
if (check1(new1)&&new1>=date1&&new1<=date2) ans++;
}
printf("%d\n",ans);
return 0;
}