算法1
思路:
1.将8位数字的日期分成两半,前半部分和后半部分,然后对前部分取反想加,判断是否和原日期一样,如果一样,ans++
2.处理二月份
C++ 代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check_valid(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;//leap在这里如果是平年leap为0,否则为1
if (day > 28 + leap) return false;//如果是二月份,day+1,退出判断
}
return true;
}
int main(){
int date1,date2;
cin>>date1>>date2;
int res=0;
for(int i=1000;i<10000;i++){
int date=i,x=i;//定义两个变量,将8位数字的日期分成两半,前半部分和后半部分,然后对前部分取反想加,判断是否和原日期一样,如果一样,ans++
for(int j=0;j<4;j++)date=date*10+x%10,x/=10;
if(date1<=date &&date<=date2 &&check_valid(date))res++;
}
cout<<res<<endl;
return 0;
}