C++第12周项目4——用函数解决素数、回文数等

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

【项目4-回文、素数】
   编制一个返回值为bool型的函数isPrimer(),用于判断参数是否为素数,isPalindrome()用于判断参数是否是回文数,调用函数回答以下问题(可以分别编制几个程序完成,也可以在一个main()函数中完成,输出时,用明显的提示语,说明正在完成哪个任务。)

(1)输出10000以内的所有素数。
(2)输出10000以内的所有回文数。
(3)输出10000以内的所有回文素数。
(4)拓展(选做):若一个素数的反序数仍为素数,则称它为可逆素数。求10000以内的所有可逆素数,在上面的代码基础上拓展。

参考解答:

#include <iostream>
#include<cmath>
using namespace std;
//自定义函数的原型(即函数声明)
bool isPrime(int n);  //n是素数,返回true,否则返回false
bool isPalindrome(int n); //n是回文数,返回true,否则返回false
int reverseNum(int n);  //返回n的逆序数

int main()
{
	int m;
	cout<<"(1)输出10000以内的所有素数"<<endl;
	for(m=2;m<10000;++m)
	{
		if(isPrime(m))
			cout<<m<<'\t';
	}
	cout<<endl<<endl;
	cout<<"(2)输出10000以内的所有回文数"<<endl;
	for(m=2;m<10000;++m)
	{
		if(isPalindrome(m))
			cout<<m<<'\t';
	}
	cout<<endl<<endl;
	cout<<"(3)输出10000以内的所有回文素数"<<endl;
	for(m=2;m<10000;++m)
	{
		if(isPalindrome(m)&&isPrime(m))
			cout<<m<<'\t';
	}
	cout<<endl<<endl;
	cout<<"(4)求10000以内的所有可逆素数"<<endl;
	for(m=2;m<10000;++m)
	{
		if(isPrime(m)&&isPrime(reverseNum(m)))
			cout<<m<<'\t';
	}
	return 0;
}

bool isPrime(int n)
{
	bool prime=true;
	int k=int(sqrt(n));
	for(int i=2;i<=k;i++)
	{
		if(n%i==0)
		{
			prime=false;
			break;
		}
	}
	return prime;
}

bool isPalindrome(int n)
{
	bool palindrome=false; //先默认不是回文数
	int m,k;
	m=n;
	k=0;//k用于求出n的反序数
	while(m>0)
	{
		k=k*10+m%10;
		m=m/10;
	}
	if(k==n)
		palindrome=true;
	return palindrome;
}

int reverseNum(int n)
{
	int k;
	k=0;//k用于求出n的反序数
	while(n>0)
	{
		k=k*10+n%10;
		n=n/10;
	}
	return k;
}

程序结构的进一步优化:注意到在判断是否为回文数时,需要求得逆序数,实际上,可以由isPalindrome(int n)调用reverseNum(int n)做这件事。所以,上面程序中的isPalindrome(int n)可以重新定义为:

//isPalindrome的另一种实现,调用reverseNum(int n)求逆序数,使程序结构更合理
bool isPalindrome(int n)
{
	bool palindrome=false; //先默认不是回文数
	if(reverseNum(n)==n)   //这一句见功夫!!!
		palindrome=true;
	return palindrome;
}
时间: 2024-08-20 06:44:02

C++第12周项目4——用函数解决素数、回文数等的相关文章

第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++第12周项目2——分段函数

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目2-求解分段函数的值] 参考解答: #include<iostream> using namespace std; const double x1=0.3, x2=0.8; //定义为全局常变量,方便,易维护 double f(double); //此处加入对自定义函数f的声明 int main( ) { double x; cout<<"请

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++第12周项目——函数应用

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1-当年第几天] 定义一个函数,其参数为年.月.日的值,返回这一天为该年的第几天.要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果. [项目2-太乐了]先听故事,再编程序. 故事是这样的:话说sin和cos是一对夫妇.一天,sin去听相声了,cos在家.过了一会,有人敲门,cos开门一看,是一个不认识的多项式函数.cos问:你是谁啊?

C++第9周项目1分段函数求值

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1分段函数求值]从键盘输入x的值(整型),根据公式1计算并输出x和y的值.  要求用switch语句构造多分支结构完成求解,利用BB平台上"第9周练习源代码及博文模板.txt"中给出了博文模板发布报告. 解法1:类似例3.9的思路,各分段的标准都为2的倍数,所以,构造表达式 t= x/2,根据t的取值决定switch分支: #include<iost

C++第7周项目2 - 成员函数、友元函数和一般函数之区别

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8775137 [项目2-成员函数.友元函数和一般函数之区别]阅读程序,仔细阅读注释.然后模仿完成求点类中距离的任务.  你需要完成的任务是,利用成员函数.友元函数和一般函数,实现三个版本的求两点间距离的函数,并设计main()函数完成测试.此项目和例子的区别在于

C++第17周项目1——体会函数参数传递

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目1-体会函数参数传递]1.下面三段程序都试图通过定义函数,实现实际参数在必要时的交换,哪些能够实现,哪些不能实现?通过运行程序和单步执行,让自己对这一过程更加清楚,然后请在博文中给出明确的回答,并用你自己的话展开描述(自己的话,但要用术语,用术语讲技术的事,是必须经历的一个过程.) 2.设计一个程序,输入3个整数,将其按从大到小的顺序输出,要求(1)排序功能通过函数

C++第12周项目1——重温星号图

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目1-调用函数输出星号图] 这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能,打下基础. 任务1:补充完下面的程序,使程序输出上面的两个星号图,要求在main()函数中调用自定义函数printstars(). 要求:左图必需实现,右图尝试实现. 输出左图的参考解答: //for循环中调用函数printstars的程序