Rey_HR @ 2017-11-01 19:26:14
//数学方法
#include<bits/stdc++.h>
using namespace std;
int tot=0;
int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};//每月天数
int n,m;
int dal_zj(int k);
int main()
{
cin>>m>>n;
for(int i=m/10000;i<=n/10000;++i)//每一年至多只有1个满足条件
dal_zj(i);
cout<<tot;
}
int dal_zj(int k)//函数判断此年有没有回文日期
{
int a,b,c,d,p,s;
a=k/1000;
b=k/100%10;
c=k%100/10;
d=k%10;
p=a*10+b;s=c*10+d;
if((p!=0&&p%4==0)||(p==0&&s%4==0)) mon[1]++;//闰年判断 mon【1】就是2月
if((d*10+c<=12)&&mon[d*10+c-1]>=b*10+a&&a*10000001+b*1000010+c*100100+d*11000>=m&&a*10000001+b*1000010+c*100100+d*11000<=n) tot++;
//判断 d*10+c为月 b*10+a为日 且该数在m,n之间
if((p!=0&&p%4==0)||(p==0&&s%4==0)) mon[1]--; //恢复
}
by 牙神幻十郎 @ 2017-11-03 21:26:14
其实枚举年份没有按月份枚举好写,但是效率高些。。不重要
by 姜维 @ 2017-11-08 22:32:44
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
using namespace std;
int s[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int main()
{
int m,n,k=0,a=0,b=0;
scanf("%d %d",&m,&n);
if(m==n)
{
char x[10];
int k=0;
sprintf(x,"%d",m);
for(int i=0;i<4;i++)
{
if(x[i]==x[7-i])
k++;
}
if(k==4)
cout<<'1';
else
cout<<'0';
return 0;
}
for(int i=1;i<=12;i++)
{
for(int j=1;j<=s[i];j++)
{
a=(j%10)*1000+(j/10)*100+(i%10)*10+(i/10);
b=a*10000+i*100+j;
if(b>=m&&b<=n)
k++;
}
}
cout<<k;
return 0;
}