区间内的对称日

该程序通过输入两个年份,计算并输出这两个年份之间的所有对称日期。首先,定义了判断平闰年的函数和检查回文数的函数。然后,遍历指定的年份区间,根据平闰年条件确定每个月的天数,再判断每一天是否为回文数,若是则输出,并控制每五行换行。该程序涉及日期处理、回文数判断及控制流等概念。
摘要由CSDN通过智能技术生成

题目说明:
输入两个年份x,y,输出这两个年份内的所有对称日

输入:
输入两个正整数x和y,输入保证x<y。
输出:

两个年份里的所有对称日。

解题思路:

1.定义函数判断平闰年;

2.定义函数判断回文数;

3.输入要找的年份区间;

4.判断平闰年后判断月份,注意二月的特例;

5.挨个判断是否为回文数;

6.区间内年,月,日累加,判断是否为对称日;

7.按要求输出;

#include<stdio.h>
int pingnian(int year)//定义函数判断平闰年 
{
 if(year%4==0&&year%100!=0||year%400==0){
  return 0;
 }else{
  return 1;
 }
}
int huiwen(int x)//定义函数判断回文数 
{
 int a[8],i=0;
 while(x!=0){
  a[i]=x%10;
  x/=10;
  i++;
 }
 int flag=0,j;
 for(i=0,j=7;i<8,j>=0;i++,j--){
  if(a[i]==a[j]){
   flag=1;
  }else{
   flag=0;
   break;
  }
 }//正序数等于倒序数为回文数 
 return flag;
}
int main()
{
 int m,n,cnt=0;
 printf("计算m年到n年的对称日,输入m n:");
 scanf("%d %d",&m,&n);//输入要找的区间 
 int year,month,day;
 for(year=m;year<=n;year++){//年累加 
  for(month=1;month<=12;month++){//月累加 
   if(pingnian(year)){//调用函数判断平闰年 
    if(month==2){
     for(day=1;day<=28;day++){//二月特例 
      if(huiwen(year*10000+month*100+day)){//调用函数判断回文数 
       printf("%d ",year*10000+month*100+day);//输出回文数 
       cnt++;
       if(cnt%5==0&&cnt!=0){//控制换行 
        printf("\n");
       }
      }
     }
    }else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){//均为31天的月份 
     for(day=1;day<=31;day++){
      if(huiwen(year*10000+month*100+day)){//判断回文 
       printf("%d ",year*10000+month*100+day);//输出回文数 
       cnt++;
       if(cnt%5==0&&cnt!=0){//控制换行 
        printf("\n");
       }
      }
     }
    }else{
     for(day=1;day<=30;day++){//均为30天的月份 
      if(huiwen(year*10000+month*100+day)){//调函数判断回文 
       printf("%d ",year*10000+month*100+day);//输出回文数 
       cnt++;
       if(cnt%5==0&&cnt!=0){//控制换行 
        printf("\n");
       }
      }
     }
    }
   }else{//判断闰年 
    if(month==2){//二月特例 
     for(day=1;day<=29;day++){
      if(huiwen(year*10000+month*100+day)){//调用函数判断回文数 
       printf("%d ",year*10000+month*100+day);
       cnt++;
       if(cnt%5==0&&cnt!=0){
        printf("\n");
       }
      }
      
     }
    }else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
     for(day=1;day<=31;day++){
      if(huiwen(year*10000+month*100+day)){
       printf("%d ",year*10000+month*100+day);
       cnt++;
       if(cnt%5==0&&cnt!=0){
        printf("\n");
       }
      }
     }
    }else{
     for(day=1;day<=30;day++){
      if(huiwen(year*10000+month*100+day)){
       printf("%d ",year*10000+month*100+day);
       cnt++;
       if(cnt%5==0&&cnt!=0){
        printf("\n");
       }
      }
     }
 }
}
}
}
	 return 0;
    }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值