AcWing 466. 回文日期
原题链接
简单
作者:
虚实相依
,
2024-11-13 17:40:28
,
所有人可见
,
阅读 1
//先在data1到data2之间遍历,找合法的日期表示,并对每一个合法日期进行判断是否回文
#include<iostream>
#include<algorithm>
#include<sstream>
using namespace std;
string s1,s2;
int num;
//字符转int
int getRes(string s)
{
stringstream ss;
ss << s;
int res = 0;
ss >> res;
return res;
}
//判断合法日期
bool ifdata(int x) {
int year = x / 10000;
int month = x % 10000 / 100;
int day = x % 100;
if (month < 1 || month > 12 || day < 1 || day > 31) {
return false;
}
if (month == 4 || month == 6 || month == 9 || month == 11) {
if (day > 30) {
return false;
}
} else if (month == 2) {
// 判断是否是闰年
bool isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
if (isLeapYear) {
if (day > 29) {
return false;
}
} else {
if (day > 28) {
return false;
}
}
}
return true;
}
//判断回文
bool ifre(int x)
{
int tmp=x,ans=0;
while(tmp>ans)
{
ans=ans*10+tmp%10;
tmp/=10;
}
return tmp==ans;
}
int main()
{
cin>>s1>>s2;
int a=getRes(s1);
int b=getRes(s2);
for(int i=a;i<=b;i++)
{
if(ifdata(i))
{
if(ifre(i))
num++;
}
}
cout<<num<<endl;
return 0;
}