xyz0815 @ 2019-05-29 15:07:13
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
char a[10],b[10],s[10];
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int cnt,ys,yf,ms,mf,ds,df;
int con(char x[],int y,int z)//将字符串转为数字
{
int s=0;
for(int i=y;i<=z;i++)
{
s+=int(x[i]-'0')*pow(10,double(z-i));
}
return s;
}
void cons(int x,int y,int z)//将数字转为字符串
{
for(int i=y;i<=z;i++)
{
s[i]=char((x/int(pow(10,double(z-i))))%10)+'0';
}
return;
}
bool check(char x[],char y[])//判断字符是否回文
{
char z[10];
int c=0;
for(int i=7;i>=0;i--)
z[c++]=y[i];
z[c]='\0';
if(strcmp(z,x)==0)
return 1;
else
return 0;
}
bool run(int y)
{
if((y%4==0&&y%100!=0)||y%400==0)
return 1;
else
return 0;
}
bool ok(int y,int md)
{
int m,d;
m=md/1000%10*10+md/100%10;
d=md/10%10*10+md%10;
if(y==ys)
{
if(m<ms||(m==ms&&d<ds))
return 0;
}
if(y==yf)
{
if(m>mf||(m==mf&&d>df))
return 0;
}
if(m>=1&&m<=12)
{
if(m==2)
{
if(run(y))
{
if(d>=1&&d<=mon[m]+1)
{
return 1;
}
}
}
if(d>=1&&d<=mon[m])
{
return 1;
}
}
return 0;
}
int main()
{
cin>>a>>b;
int i,j,t;
char m[5];
ys=con(a,0,3);
yf=con(b,0,3);
ms=con(a,4,5);
mf=con(b,4,5);
ds=con(a,6,7);
df=con(b,6,7);
if(ys==yf&&ms==mf&&ds==df)
{
if(check(a,b))
{
cout<<1;
return 0;
}
else
{
cout<<0;
return 0;
}
}
for(i=ys;i<=yf;i++)
{
t=0;
cons(i,0,3);
for(j=3;j>=0;j--)
{
m[t++]=s[j];
}
t=con(m,0,3);
if(ok(i,t))
{
cnt++;
}
}
cout<<cnt;
return 0;
}
可读性有些差......
by charliegong @ 2019-05-29 15:13:51
#include<iostream>
#include<cstring>
#include<algorithm>
#include<stdio.h>
using namespace std;
int m[13]={31,28,31,30,31,30,31,31,30,31,30,31};
bool hv(int x){
int a[10]={x/10000000,x/1000000%10,x/100000%10,x/10000%10,x/1000%10,x/100%10,x/10%10,x%10};
if(a[0]==a[7]&&a[1]==a[6]&&a[2]==a[5]&&a[3]==a[4]) return true;
return false;
}
bool rq(int x){
m[1]=28;
int day=x%100;
int month=x%10000/100;
int year=x/10000;
if(day>31) return false;
if(month>12) return false;
bool flag=false;
int a=year%4;
int b=year%100;
int c=year%400;
if(a==0){
if(b!=0) m[1]=29;
if(b==0&&c==0) m[1]=29;
}
if(m[month-1]<day) return false;
return true;
}
int main()
{
int i,j,n,m,sum=0;
scanf("%d %d",&n,&m);
for(int i=n;i<=m;i++)
{
if(hv(i)==true&&rq(i)==true) sum++;
int day=i%100;
if(day>31) i+=68;
}
printf("%d",sum);
return 0;
}
码风更烂…………
by charliegong @ 2019-05-29 15:14:07
@xyz0815