AcWing 466. 回文日期
原题链接
简单
作者:
尼古拉斯小布丁
,
2021-04-13 10:36:52
,
所有人可见
,
阅读 257
先生成回文日期,再判断日期是否合法
#include <cstring>
#include<iostream>
#include <algorithm>
using namespace std;
int days[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int date1,date2; //int型范围是-2147483648~2147483647,就直接用int型表示日期
int res;
bool judge(int date){
int year = date / 10000;
int month = date %10000 /100;
int day = date %100;
if(month==0 || month>12) return false; //先判断月份是否合法
if(day==0 || (month != 2 && day>days[month])) return false; //判断日子是否合法
if(month==2){
int leap = year%100 && year%4==0 || year%400==0; //闰年为1,平年为0
if(day>days[2]+1) return false;
}
return true;
}
int main(){
cin>>date1>>date2;
for(int i=1000;i<10000;i++){ //先枚举日期的前四位
int date = i,x = i;
for(int j=0;j<4;j++){ //把前四位反过来,加到后面,这样来生成日期
date= date * 10+x%10, x/=10;
}
if(date1<=date && date<=date2 && judge(date)) res++; //这里必须是<=和>=
}
cout<<res<<endl;
return 0;
}