【项目3- 有趣的数字】先阅读例题,体会处理数字的一般方法,然后自行选题进行解决,掌握这种类型程序设计的一般方法。

任务:解决下面的问题(选做一道即算完成任务)

(10)很有趣的一个题目:2011年11月02日是一个回文日:2011 1102,在2011级同学做这道题时我们刚刚度过这一天!请列出近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;
}

运行结果

C++第11周项目3(10)——回文日_javascript