C语言输入一个数n,输出n以内所有的回文素数.回文素数,即是素数,又是回文数
判断是否为素数、是否为回文数,以及构造一个数的逆序数,均可以用自定义函数实现,以使程序结构清晰,易于实现...
判断是否为素数、是否为回文数,以及构造一个数的逆序数,均可以用自定义函数实现,以使程序结构清晰,易于实现
展开
2个回答
展开全部
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
bool prime(int n){
int i;
if(n>2 && !(n&1) || n<2) return false;
for(i=3; i*i<=n;i+=2)
if(!(n%i)) return false;
return true;
}
void prime_Palindrome(int n){
char a[11],b[11];
int x,i;
if(n>100){
if(*itoa(n,a,10)&1==0) (*a)--;
if((x=strlen(a))&1==0){
for(x--,i=0;i<x;a[i++]='9');
a[x]='\0';
n=atoi(a);
}
}
for(x=n<12?n:12,i=2;i<x;i++)
if(prime(i))
printf("%d\n",i);
for(i=10;;i++){
if((*itoa(i,a,10))&1==0)
i=atoi(&++(*a));
strcat(a,strrev(strcpy(b,a))+1);
if((x=atoi(a))>n) break;
if(prime(x))
printf("%d\n",x);
}
}
void Palindrome(int n){
char a[11],b[11];
int i,j,k,tmp;
for(k=j=i=1;;i++){
strrev(strcpy(b,itoa(i,a,10)));
if(k<(tmp=strlen(a))){
k=tmp;
for(;j<i;j++){
strcat(a,strrev(strcpy(b,itoa(j,a,10))));
if((tmp=atoi(a))>n) break;
printf("%d\n",tmp);
}
if(tmp>n) break;
}
else{
strcat(a,b+1);
if((tmp=atoi(a))>n) break;
printf("%d\n",tmp);
}
}
}
void main(void){
int n;
printf("Type an integer...\nn=");
scanf("%d",&n);
printf("\nBetween 1 and %d palindrome are:\n");
Palindrome(n);
printf("\nPalindrome primes between 1 to 100 are:\n");
prime_Palindrome(n);
}
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
bool prime(int n){
int i;
if(n>2 && !(n&1) || n<2) return false;
for(i=3; i*i<=n;i+=2)
if(!(n%i)) return false;
return true;
}
void prime_Palindrome(int n){
char a[11],b[11];
int x,i;
if(n>100){
if(*itoa(n,a,10)&1==0) (*a)--;
if((x=strlen(a))&1==0){
for(x--,i=0;i<x;a[i++]='9');
a[x]='\0';
n=atoi(a);
}
}
for(x=n<12?n:12,i=2;i<x;i++)
if(prime(i))
printf("%d\n",i);
for(i=10;;i++){
if((*itoa(i,a,10))&1==0)
i=atoi(&++(*a));
strcat(a,strrev(strcpy(b,a))+1);
if((x=atoi(a))>n) break;
if(prime(x))
printf("%d\n",x);
}
}
void Palindrome(int n){
char a[11],b[11];
int i,j,k,tmp;
for(k=j=i=1;;i++){
strrev(strcpy(b,itoa(i,a,10)));
if(k<(tmp=strlen(a))){
k=tmp;
for(;j<i;j++){
strcat(a,strrev(strcpy(b,itoa(j,a,10))));
if((tmp=atoi(a))>n) break;
printf("%d\n",tmp);
}
if(tmp>n) break;
}
else{
strcat(a,b+1);
if((tmp=atoi(a))>n) break;
printf("%d\n",tmp);
}
}
}
void main(void){
int n;
printf("Type an integer...\nn=");
scanf("%d",&n);
printf("\nBetween 1 and %d palindrome are:\n");
Palindrome(n);
printf("\nPalindrome primes between 1 to 100 are:\n");
prime_Palindrome(n);
}
展开全部
#include"stdio.h"
void huiwen(int n){
int i=1,bo=1;
int num1=n,num2=n;
while(num1>=10){
num1%=10;i++;
}
int *a=new int[i];
i=0;
while(num2>0){
a[i++]=num2%10;
num2/=10;
}
for(int j=0;j<i/2;j++){
if(a[j]!=a[i-1-j]){
bo=0;break;
}
}
if(bo)
printf(" %d" ,n);
}
void prime(int n){
int bo;
for(int i=2;i<=n;i++){
bo=1;
for(int j=2;j*j<=i;j++){
if(i%j==0){
bo=0;
break;
}
}
if(bo){
huiwen(i);
}
}
}
void main(){
int n;
printf("输入一个数\n");
scanf("%d",&n);
printf("回文素数有:");
prime(n);
printf("\n");
}
void huiwen(int n){
int i=1,bo=1;
int num1=n,num2=n;
while(num1>=10){
num1%=10;i++;
}
int *a=new int[i];
i=0;
while(num2>0){
a[i++]=num2%10;
num2/=10;
}
for(int j=0;j<i/2;j++){
if(a[j]!=a[i-1-j]){
bo=0;break;
}
}
if(bo)
printf(" %d" ,n);
}
void prime(int n){
int bo;
for(int i=2;i<=n;i++){
bo=1;
for(int j=2;j*j<=i;j++){
if(i%j==0){
bo=0;
break;
}
}
if(bo){
huiwen(i);
}
}
}
void main(){
int n;
printf("输入一个数\n");
scanf("%d",&n);
printf("回文素数有:");
prime(n);
printf("\n");
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询