#include<bits/stdc++.h>
using namespace std;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int y1,y2;
cin>>y1>>y2;
int a=0;
int y3,y4;
y3=y1/10000;
y4=y2/10000;
for(int i=y3;i<=y4;i++)
{
m[2]=28;
if((i/1000)%4==0&&(i/1000)%100!=0||(i/1000)%400==0)
{
m[2]=29;
}
int y5=i;
int y6=0;
while(2)
{
y6=y6*10+y5%10;
y5/=10;
if(y5==0)
{
break;
}
}
if(y6%100>0 && y6%100<=m[(y6/100)%100] && (y6/100)>0 && (y6/100)%100<13)
{
//cout<<i<<" "<<y6<<endl;
a++;
}
}
/*for(int i=y1;i<=y2;i++)
{
m[2]=28;
if((i/1000)%4==0&&(i/1000)%100!=0||(i/1000)%400==0)
{
m[2]=29;
}
if(i%100>m[(i/100)%100])//20221101
{
i+=100;
i=i/100*100+1;
if((i/100)%100>12)
{
i+=10000;
i=i/1000*1000+101;
}
//20221131
}
int s=i;
int y3=0;
while(2)
{
y3=y3*10+s%10;
s/=10;
if(s==0)
{
break;
}
}
if(i==y3)
{
a++;
}
}*/
cout<<a;
return 0;
}
题目来源 P2010
因为老师叫我重新写一遍嘛(过了超久才叫重写),我写着写着就想到了一个新的思路
就是说它要8位回文日期嘛,我只要前面4位的年份久行了,再把它翻转,看它的日期(月和日)是不是正确的(就是月<13,日<它的所在月的总天数)
但我测了只得63分,这是什么回事啊请问;
如有回答,万分感谢
以下是我以前(老师帮改过的)代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int date1,date2;
int y,m,d;
cin>>date1>>date2;
y=date1/10000;
m=date1%1000/100;
d=date1%100;
int n=0;
while(1)
{
if(y*10000+m*100+d>date2)
{
cout<<n;
return 0;
}
if(y%10==m/10&&y/10%10==m%10&&y/100%10==d/10&&y/1000==d%10)
{
//cout << y*10000+m*100+d << endl;
n++;
}
int mq[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(y%4==0&&y%100!=0||y%400==0)
{
mq[2]++;
}
d++;
if(mq[m]<d)
{
d=1;
m++;
if(m>12)
{
m=1;
y++;
}
}
}
return 0;
}