回文日期个数统计
作者:
巷港
,
2022-02-13 21:45:34
,
所有人可见
,
阅读 237
466.回文日期个数统计
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(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 a,b;
scanf("%d%d",&a,&b);
int ans=0;
for (int i=1000;i<10000;i++) //由于回文数字前四位和后四位是一样的,所以只需要枚举前4位的情况即可(0~9999)
{
int date=i,t=i;
for (int j=0;j<4;j++) date=date*10+t%10,t/=10; //对于每个日期,构造回文日期
if (check(date)&&date>=a&&date<=b) ans++; //构造的回文日期合法且日期在a和b中,即统计个数
}
printf("%d\n",ans);
return 0;
}