题目
计算1000年至3000年间的对称日
判断年月日是否对称,先分别将年月日输进字符串中,再将字符串连接起来,最后判断字符串是否为回文字符串即可。
#include<stdio.h>
#include<string.h>
int R(int y);
void S(char a[],int b);
int P(char a[]);
int main(void){
int y,m,d,c=0; //三个变量分别为年月日 最后一个为输出控制
char cy[5]={"0000"},cm[3]={"00"},cd[3]={"00"},ch[20]=""; //分别设置字符串来储存年月日
for(y=1000;y<=3000;y++){
for(m=1;m<=12;m++){
for(d=1;d<=31;d++){ //闰年判断
if(R(y)&&m==2&&d>29){
break;
}
if(!R(y)&&m==2&&d>28){
break;
}
if((m==2||m==4||m==6||m==9||m==11)&&d>30){ //月份判断
break;
}
strcpy(ch,"");
S(cy,y);
S(cm,m);
if(m<10){
cm[0]='0';
}
S(cd,d);
if(d<10){
cd[0]='0';
}
strcat(strcat(strcat(ch,cy),cm),cd); //连接字符串
if(P(ch)){
printf("%s\t",ch);
c++;
if(c%5==0){
printf("\n");
}
}
}
}
}
return 0;
}
int R(int y){ //判断闰年
if(y%4==0&&y%100!=0||y%400==0){
return 1;
}else{
return 0;
}
}
void S(char a[],int b){ //数字转化为字符串
int i,j;
for(i=strlen(a)-1;b>0;i--){
a[i]=b%10+'0';
b/=10;
}
}
int P(char a[]){ //判断是否为回文
int i,j;
j=strlen(a)-1;
for(i=0;i<=j/2;i++){
if(a[i]!=a[j-i]){
return 0;
}
}
return 1;
}