您的位置:首页 > 编程语言 > C语言/C++

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

2012-11-09 21:17 357 查看
课程首页地址:/article/1353502.html

【项目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;
}
运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: