题意
计算起始日期到截止日期中(包括起始和截止日期)有多少个日期是回文日期。
思路
模拟题,方法很多,我这里提供一种。
按天进行模拟,用dx[]数组记录每个月的天数(二月份是例外,这里存下28,模拟时单独进行判断是28还是29),用y、m、d分别表示当前遍历到的年份、月份、天数,当d大于当前月份的天数时,d重置为1,m+1,
当m大于12时,m重置为1,y+1,以此类推。
#include <iostream>
using namespace std;
typedef long long ll;
int dx[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool judge_run(int y)
{
return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0;
}
bool judge_hui(ll res)
{
ll x = res, y = 0;
while (x)
{
y = y * 10 + x % 10;
x /= 10;
}
return res == y;
}
ll add(int y, int m, int d)
{
return y * 10000 + m * 100 + d;
}
int main()
{
ll da1, da2, res = 0;
cin >> da1 >> da2;
int y = da1 / 10000, m = (da1 / 100) % 100, d = da1 % 100;
while (add(y, m, d) <= da2)
{
if (judge_hui(add(y, m, d))) res++;
if (judge_run(y) && m == 2)
{
if (d == dx[m] + 1)
{
d = 1;
m++;
}
else d++;
}
else
{
if (d == dx[m])
{
d = 1;
if (m == 12)
{
m = 1, y++;
}
else m++;
}
else d++;
}
}
cout << res << endl;
return 0;
}