回文日期 代码哪儿出问题?
10个测试用例通过9个,用例2也不知道是啥,求指点!
// 普通回文:ABCDDCBA 特殊回文:ABABBABA
// 输入日期-判断日期是否正确-判断当年是否存在回文日期并且在输入日期之后-若不存在,年份+1,月=1,日=1,根据年份建立回文日期-判断该回文日期是否正确
#include <stdio.h>
int dat(int year,int month,int day);
int main(int argc, const char * argv[]) {
int date=0;
scanf("%d",&date); //输入日期
int year=0,month=0,day=0; //日期拆解为年、月、日
day=date%100;
date/=100;
month=date%100;
year=date/100;
if(dat(year,month,day)==0)return 0;
//判断输入日期当年是否存在回文日期,不存在则year+1
//1,2为ABBA和普通指示数 3为全部计算出回文的指示数
int flag_1=0,flag_2=0;
int s1[3]={0},s2[3]={0};//储存回文日期和ABBA式回文日期
while((flag_1==0||flag_2==0)&&year<9999)
{
int ye=year/100;
int ar=year%100;
int ra=ar%10*10+ar/10; //获得回文的month:ra 和day:ey
int ey=ye%10*10+ye/10;
//判断日期是否合法,11111111不算ABABBABA回文
int y=ye/10,e=ye%10;
if(dat(year,ra,ey)==0||y==e){
year++;
month=0;
day=0;
continue;
}
if((month==ra && day<ey)||month<ra)
{
if(flag_1==0 && ye==ar){ //ABBA式回文
s2[0]=year;
s2[1]=ra;
s2[2]=ey;
flag_1=1;
}
else if (flag_2==0){
s1[0]=year; //普通回文
s1[1]=ra;
s1[2]=ey;
flag_2=1;
}
//year满足回文要求并且日期满足回文要求
}
//不满足
year++;
month=0;
day=0;
}
printf("%d%02d%02d\n",s1[0],s1[1],s1[2]);
printf("%d%02d%02d\n",s2[0],s2[1],s2[2]);
return 0;
}
//判断输入的日期是否正确
int dat(int y,int m,int d){
if (m<1||m>12||d>31||d<1)return 0;
int f=0;
if((y%400==0||y%4==0)&&y%100!=0)//判断闰年
f=1;
if(m==2&&d>28+f)
return 0;
int e=0;
if(m<8)
e=m%2;
else e=(m+1)%2;
if(d>30+e)return 0;
return 1;
}