上课的时候浏览别人的博客发现这个问题的,以前也看到过,但是就是没有动手调试。今天贴上的代码,并且分析分析。
先上代码
#include "stdafx.h"
#include "iostream.h"
#include "math.h"
bool is_huiwenshu(int x);
int main(int argc, char* argv[])
{
cout<<"输入一个数n,求该数内的回文数"<<endl;
int n;
cin>>n;
for(int i=2;i<n;i++)
{
int flag=0;//作为判断是否为素数的标志
for(int j=2;j<=sqrt(i);j++)
{
if(i%j==0)
{
flag=1;
break;
}
}
if(flag==0&&is_huiwenshu(i))
cout<<i<<" ";
}
return 0;
}
bool is_huiwenshu(int x)
{
int m=x;
int i=0,j=0;
while(m!=0)
{
i=m%10;//i依次保存低位上的数
j=j*10+i;//低位上的数到高位的转换
m=m/10;
}
return (j==x);
}
代码中也有部分注释,这里在解释下。回文数这个问题的解决前提是得写出素数的程序,在上面的2层for循环之内,用flag标志是否是素数,一开始假设i=2:到n都是素数,因此flag=0;在内层for循环中,由i%j==0进行判断,发现成立的话立马将flag=1;标志此时的i不是素数。
现在开始分析回文数,回文数就是要求整个数是对称的,高位与地位对称,例如字符aba一样。因此在程序里面的先取出低位,然后将低位一步一步的*10,移动到高位。最终比较新产生的书与原来的书是否相等,则可以判断是不是回文数。