回文素数:俩个方面一个是判断是不是回文数,
另一个是判断是不是素数。
来一个一个解决。
回文数:顾名思义,就是关于中心对称。我们现在有一个简单的方法,就是根据回文数的特性,就是从前面算和从后边算都是可以算出同一个数的。
我们还需要知道一个数x,这个数(x%10)得到的是x的最后面的数大小。这个数(x/10)得到的是除了最后一位前面的数。
#include<iostream> using namespace std; int huiwen(int n){ int a,b; int x=0; a=n; while(a>0) { x=a%10+x*10; //这里算的是什么?是从个位数开始算,然后加起来。把后边的数作为前面的数来算 a=a/10; //这里算什么?算除了最后那位前面的那几位,目的是让上面的那个式子可以算起来 } if(n==x) { return 1; } else { return 0; } } int sushu(int n){ int x=n; for(int i=2;i<n;i++) { if(x%i==0) return 0; } return 1; } int main(){ int a,b; cin>>a>>b; int n=0; for(int i=a;i<b;i++) { if(huiwen(i)&&sushu(i)) { n++; cout<<i<<"是回文素数"<<endl; } } cout<<"一共有"<<n<<"个"<<endl; return 0; }
这里还要注意俩个点:
1、这里的判断回文数的:
x=x*10+a%10;就是判断是否是回文数的这个数的末尾作为前面的来算。
a=a/10; 得到刚刚用过的最后得数来算前面剩下的啥样。
2、判断素数的:int sushu(int n){
int x=n; 1.注意这里需要有一个数来接n,因为在for循环里如果不接的话,n是一直在变化的,不可以 for(int i=2;i<n;i++) { if(x%i==0) return 0;2.还有这里,下面的return 1;是在for循环之外,为什么在外面是因为,如果你是else{return 1;}这样的就是如果存在这个数%i不等于0,就会return 1;
举个例子就是比如在这里27%4不等于0.但是不能说27就是素数。而27可以有3*9得到。所有要拉出去return 1; } return 1; }