AcWing 2867. 回文日期
原题链接
简单
作者:
浅笙yax
,
2024-03-18 20:53:06
,
所有人可见
,
阅读 4
把每个判断条件分成一个个函数,来解
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
//判断是否合法
bool check(int date)
{
int year = date/10000;
int month = date %10000/100;
int day = date%100;
if(month >12 || month==0) return false;
if(day == 0) return false;
if((year % 4 == 0 && year %100 != 0) || (year %400 == 0)) days[2] = 29;
else days[2] = 28;
if(day>days[month]) return false;
return true;
}
//判断是否回文
bool check2(int date)
{
//2010 0102
int year = date/10000;
int month = date %10000/100;
int day = date%100;
if(year/1000 == day%10 && year/100%10 == day/10 && year % 100/10 == month%10 && year%10 == month/10)
return true;
else return false;
}
//ABAB BABA
bool check3(int date)
{
int year = date/10000;
int month = date %10000/100;
int day = date%100;
if(year/1000 == day%10 &&day%10== year % 100/10 && year % 100/10 == month%10 && year/100%10 == day/10 && day/10 == year%10 && year%10 == month/10 && year/1000!=year/100%10)
return true;
else return false;
}
int main()
{
int n;
cin>>n;
//20211202
for(int i = n+1; i<=99999999; i++)
{
if(check(i) && check2(i))
{
cout<<i<<endl;
break;
}
}
for(int i = n+1; i<=99999999; i++)
{
//21211212
if(check(i) && check3(i))
{
cout<<i<<endl;
break;
}
}
return 0;
}