问题及代码:
/*
*copyright (c) 2014,烟台大学计算机学院
*all rights reserved.
*文 件 名 : 回文素数.cpp
*作 者 :白云飞
*完成日期 :2014年11月10号
*版 本 号 :v1.0
*
*问题描述 :输出1000以内所有的回文素数,回文数,素数,10000以内所有可逆素数
*输入描述 :无
*程序输出 :输出1000以内所有的回文素数,回文数,素数,10000以内所有可逆素数
*/
#include<iostream>
using namespace std;
bool ispalindrome(int);
bool isprimer(int);
int reverse(int);//自定义函数
int main()
{
int i,n;//声明变量
for(i=2; i<=1000; i++)//循环语句
{
if(isprimer(i))//if语句进行判断
cout<<i<<" ";//输出素数
else cout<<"";
}
cout<<endl;
for(i=1; i<=1000; i++)//循环语句
{
if(ispalindrome(i))//if语句进行判断
cout<<i<<" ";//输出回文数
else cout<<"";
}
cout<<endl;
for(i=2; i<=1000; i++)//循环语句
{
if(ispalindrome(i)&&isprimer(i))//if语句进行判断
cout<<i<<" ";//输出回文素数
else cout<<"";
}
cout<<endl;
for(i=2; i<=10000; i++)//循环语句
{
n=reverse(i);
if(isprimer(i)&&isprimer(n))//if语句进行判断
cout<<i<<" ";//输出可逆素数
else cout<<"";
}
cout<<endl;
}
bool ispalindrome(int b)//调用自定义函数
{
int r,m=0,h=b;//声明变量
while (b>0)//循环语句
{
r=b%10;
m=m*10+r;
b=b/10;
}
if (m==h)//if语句进行判断
m=1;
else m=0;
return m;
}
bool isprimer(int b)//调用自定义函数
{
int i;//声明变量
for(i=2; i<b; i++)//循环语句
{
if( b%i==0)//if语句进行判断
return 0;
}
return 1;
}
int reverse(int x)//调用自定义函数
{
int m=0,r;//声明变量
while(x>0)//循环语句
{
r=x%10;
m=m*10+r;
x=x/10;
}
return m;
}
运行结果:
学习心得:
这个程序比较麻烦,可是没想到好方法,所以只能先用麻烦的方法了,其中可逆素数想了半天,就是没想起来,先把素数的反序数先赋值给一个字符再进行判断,耽误了半天,还好最后想到了。