题目
- 原题地址:回文日期
- 题目编号:NC16438
- 题目类型:枚举
- 时间限制:C/C++ 1秒,其他语言2秒
- 空间限制:C/C++ 262144K,其他语言524288K
1.题目大意
2.题目分析
- 直接按照年份枚举,判断回文日期是否合法、是否在起止时间内即可
3.题目代码
#include
using namespace std;
int f[13];
int func(int a)
{
int b, c, d, e;
b = a%10;
c = a/10%10;
d = a/100% 10;
e = a/1000%10;
a = a*10000 + b*1000 + c*100 + d*10 + e;
return a;
}
bool judege(int b)
{
int y = b/10000;
b %= 10000;
int m, d;
m = b/100;
d = b%100;
if(m>12||d>31||m==0)
return false;
else
{
if(m==2)
{
if((y%4==0&&y%100!=0)||y%400==0)
if(d>=1&&d<=29)
return true;
else
return false;
else
if(d>=1&&d<=28)
return true;
else
return false;
}
else
{
f[4] = f[6] = f[9] = f[11] = 1;
if(f[m])
if(d>=1&&d<=30)
return true;
else
return false;
else
if(d>=1&&d<=31)
return true;
else
return false;
}
}
}
int main() {
int a, b;
cin >> a >> b;
int ans = 0;
int a1, b1;
a1 = a/10000;
b1 = b/10000;
int tmp;
for(int i=a1;i<=b1;i++)
{
tmp = func(i);
if(judege(tmp)&&tmp>=a&&tmp<=b)//起止时间内合法的回文日期
ans++;
}
cout << ans << endl;
}