对于简单的八位数的回文日期考的很多,无论是在蓝桥杯还是在2023大学生算法大赛都有考到,但是很多同学被其中的闰年和平年以及每个月的天数搞得晕头转向,下面的代码很容易实现此类出现的问题,我也做了相应的注释,请笑纳:
源代码如下:
#include <bits/stdc++.h>
using namespace std;
int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int n,m,sum=0;
cin >> n >> m;
//20110101
//20111231
int year1=n/10000,year2=m/10000;//取年份
//year1=2011;
//year2=2011;
for(int i=year1;i<=year2;i++)
{
int g,s,b,q;//分别取年份的个、十、百、千位;
g=i%10;
s=i/10%10;
b=i/100%10;
q=i/1000%10;
int hwmonth=g*10+s;//取回文日期最后的月份 是否与year的最后两位数相等
int hwday=b*10+q;//取回文日期最后的日期 是否与year的前两位数相等
int zhrq=i*10000+g*1000+s*100+b*10+q;//最后的回文日期
if(zhrq>=n && zhrq<=m)
{
if(hwmonth >0 && hwmonth <13)
{
if(hwmonth==2 && (i%4==0 && i%100!=0 || i%400==0))
{
day[2]=29;
}
if(hwday>0 && hwday<=day[hwmonth])
{
sum++;
}
}
}
}
cout << sum;
return 0;
}
如有错误欢迎同学们评论!