strike @ 2017-10-04 12:06:35
#include<iostream>
#include<cstdio>
using namespace std;
int ans;
int main()
{ int d1,d2;
cin>>d1>>d2;
int yr1,yr2;
yr1=(d1-d1%1000)/1000;
yr2=(d2-d2%1000)/1000;
for(register int i=yr1;i<=yr2;i++)//i为年份,abcd拆分四位数;
{ int a,b,c,d;
a=(i-i%1000)/1000;d=i%10;
b=(i-a-i%100)/100;c=i-a-b-d;
if(a==d&&b==c)//验证是否是回文
{ if(i%4==0)//闰年验证
{ if(i%100==0)continue;//闰年中特殊年份舍去;
else
{ if((10*d+c)<=12&&(10*d+c)>0)//判断日期;
{ if(10*d+c==1&&(10*b+a)<=31)ans++;
if(10*d+c==2&&(10*b+a)<=29)ans++;//闰年2月日期不同;
if(10*d+c==3&&(10*b+a)<=31)ans++;
if(10*d+c==4&&(10*b+a)<=30)ans++;
if(10*d+c==5&&(10*b+a)<=31)ans++;
if(10*d+c==6&&(10*b+a)<=30)ans++;
if(10*d+c==7&&(10*b+a)<=31)ans++;
if(10*d+c==8&&(10*b+a)<=31)ans++;
if(10*d+c==9&&(10*b+a)<=30)ans++;
if(10*d+c==10&&(10*b+a)<=31)ans++;
if(10*d+c==11&&(10*b+a)<=30)ans++;
if(10*d+c==12&&(10*b+a)<=31)ans++;
else continue;//日期不符;
}
else continue;//月份不符
}
}
else//非闰年
{ if((10*d+c)<=12&&(10*d+c)>0)//判断日期;
{ if(10*d+c==1&&(10*b+a)<=31)ans++;
if(10*d+c==2&&(10*b+a)<=28)ans++;
if(10*d+c==3&&(10*b+a)<=31)ans++;
if(10*d+c==4&&(10*b+a)<=30)ans++;
if(10*d+c==5&&(10*b+a)<=31)ans++;
if(10*d+c==6&&(10*b+a)<=30)ans++;
if(10*d+c==7&&(10*b+a)<=31)ans++;
if(10*d+c==8&&(10*b+a)<=31)ans++;
if(10*d+c==9&&(10*b+a)<=30)ans++;
if(10*d+c==10&&(10*b+a)<=31)ans++;
if(10*d+c==11&&(10*b+a)<=30)ans++;
if(10*d+c==12&&(10*b+a)<=31)ans++;
else continue;//日期不符;
}
else continue;//月份不符;
}
}
else continue;//不符合回文日期;
}
cout<<ans<<endl;
return 0;}
怕自己脑子乱,没删注解,AC了三个点,求指导
by pineapples @ 2017-10-04 20:10:32
复杂自然就难找错了,建议枚举月日,推出回文日期再判断吧 不要去纠结。我一开始也是好复杂好多判断,说不定哪里一个大括号错位就错了呢,所以放宽心,学更简洁的,学更好的模拟思想啊