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

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565

【项目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;
}

运行结果

时间: 2024-08-02 03:01:22

C++第11周项目3(10)——回文日的相关文章

2014秋C++第11周项目6参考-回文、素数

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目6-回文.素数](1)编制一个函数reverse,返回给定数据的"反序数",例如输入1234,输出4321.请编制reverse函数,在下面代码的基础上补充相关的部分,实现要求的功能. int main() { int m,n; cin>>m; n=re

第12周 上机报告 1之练习3 回文日

题目:很诱人的一个题目:2011年11月02日是一个回文日:2011 1102,我们刚刚度过!请列出近80年和近60年还有多少个回文日(假如我们能活到百岁,你和我的--).注意:一年只有12个月. 2012年11月30日新发的程序: #include <iostream> using namespace std; int main( ) { int year,month,day,y,anothery; bool is_cycle; int count=0; for(year = 2012; y

《C语言及程序设计》实践参考——回文日

返回:贺老师课程教学链接  项目要求 [项目6-回文日]很有趣的一个题目:2011年11月02日是一个回文日:2011 1102,在2011级同学做这道题时我们刚刚度过这一天!请列出本世纪还有多少个回文日(假如我们能活到百岁,你和我的--).注意:一年只有12个月.[参考解答]     当年份确定后,如2015年,就看20155102能否构成一个合法的日期,其中51部分是月,02部分是日.显然,由2015就不能得出一个回文日.    再如,当年份取2090年时,20900902,由2090可以构

C++第11周项目3(5)——万以内回文素数

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目3- 有趣的数字]先阅读例题,体会处理数字的一般方法,然后自行选题进行解决,掌握这种类型程序设计的一般方法. 任务:解决下面的问题(选做一道即算完成任务) (5)输出10000以内的所有回文素数(提醒:某数是素数后再判断是否也是回文数.) #include<iostream> #include<cmath> using namespace std; i

C++第11周项目3(4)——万以内回文数

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目3- 有趣的数字]先阅读例题,体会处理数字的一般方法,然后自行选题进行解决,掌握这种类型程序设计的一般方法. 任务:解决下面的问题(选做一道即算完成任务) (4)输出10000以内的所有回文数. #include<iostream> using namespace std; int main() { int m,n,k,c=0; cout<<"

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

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目3- 有趣的数字]先阅读例题,体会处理数字的一般方法,然后自行选题进行解决,掌握这种类型程序设计的一般方法. 任务:解决下面的问题(选做一道即算完成任务) (3)输入一个正整数,判断其是否为一个回文数(例1221.12321都是回文数). #include<iostream> using namespace std; int main() { int m,n,k;

2013-C++第11周项目参考解答链接集

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 完整题目见:http://blog.csdn.net/sxhelijian/article/details/14109337 [项目1-调用函数输出星号图] 参考解答见:http://blog.csdn.net/sxhelijian/article/details/14548417 [项目2-求最大公约数]输入两个数,并求出其最大公约数 [项目2扩展-求四数的最大公约数]

2013级C++第11周项目——函数的定义与调用

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1-调用函数输出星号图] 这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能. (1)补充完下面的程序,使程序输出星号图: #include <iostream> using namespace std; void printstars(int m) //定义能输出一行m个星号的函数 { for (int j=1;

2014秋C++ 第11周项目 函数及其应用

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看. [项目1-函数版星号图]这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能.(1)补充完下面的程序,使程序输出星号图: #include <iostream> using namespace std; void printstars