回文日--char3

来源:互联网 发布:软件测试新技术ppt 编辑:程序博客网 时间:2024/06/05 19:40

        很有趣的一个题目:2011年11月02日是一个回文日:2011 1102,请列出近80年和近60年还有多少个回文日(假如我们能活到百岁,你和我的……)。注意:一年只有12个月。
        问题分析:在近80年中,年份确定后,将其从最低位开始倒着取出,每两位组成一个单位,分别对应月份和日期部分。分别判断这些月份和日期的取值范围是否合乎要求,如果符合则输出……

#include <iostream>   using namespace std;  int main( )  {      int year,month,day,y,ymd;      bool is_cycle;      int count=0;      for(year = 2012; year < 2092; year++)      {          y = year;  //思考:后面直接用year不行吗?           month=y%100; //后两位对应月           day=y/100; //前两位对应日           month=(month%10)*10+month/10;//还得把月倒过来,例year=2012时,month由12换为21           day=(day%10)*10+day/10;//对日做同样的处理           is_cycle =false;          switch(month) //12个月份,各自对应合法的日期范围           {          case 1:          case 3:          case 5:          case 7:          case 8:          case 10:          case 12:               if(day<=31)                   is_cycle =true;               break;          case 4:          case 6:          case 9:          case 11:              if(day<=30) is_cycle=true;               break;          case 2:               if((year%4==0&&year%100!=0)||year%400==0) //闰年               {                  if(day<=29)                       is_cycle =true;              }              else              {                  if(day<=28)                       is_cycle =true;              }              break;          default: continue; //后两位倒过来根本构不成月份           }          if(is_cycle) //能构成回文日           {              y=year;              ymd=year;   //构造出年月日的形式供输出               while(y>0)              {                  ymd=ymd*10+y%10;                  y=y/10;              }              cout<<ymd<<endl;              count++;          }      }      cout<<"共有 "<< count <<"个回文日。"<<endl;      return 0;  }  

运行结果:


原创粉丝点击