问题及代码:
/*
Copyright(c)2018,CSDN学院行者-
All rights reserved.
文件名称:main.c
作者:乔帅
完成日期:2018年2月1日
版本号:v1.0
问题描述:回文、素数
输入描述:无输入
程序输出:输出1000以内的素数、回文数、回文素数、可逆素数
*/
#include<stdio.h>
#include<math.h>
int isPrimer(int);
int reverse(int);
int isPalindrome(int);
int main(){
int i;
printf("(1)输出1000以内的所有素数\n");
for( i = 2 ; i < 1000 ; ++i){
if(isPrimer(i))
printf("%d\t" , i);
}
printf("\n\n");
printf("(2)输出1000以内的所有回文数\n");
for( i = 2 ; i < 1000 ; ++i){
if(isPalindrome(i))
printf("%d\t" , i);
}
printf("\n\n");
printf("(3)输出1000以内的回文素数\n");
for( i = 2 ; i < 1000 ; ++i){
if(isPalindrome(i)&&isPrimer(i))
printf("%d\t",i);
}
printf("\n\n");
printf("(4)输出10000以内的可逆素数\n");
for( i = 1 ; i < 10000 ; ++i){
if(isPrimer(i)&&isPrimer(reverse(i)))
printf("%d\t",i);
}
printf("\n");
return 0;
}
int isPrimer(int n){ //求素数
int i ,f = 1;
int k = (int)(sqrt(n)); //求素数的简化步骤
for(i = 2 ; i <= k ; i++){
if(n % i == 0){
f = 0;
break;
}
}
return f;
}
int reverse(int x){ //反序数
int m = 0 ;
while(x>0){
m = m * 10 + x % 10 ; //这里x%10可以得到数x的最后一位,m*10将得到的最后一位数进行提到前面,就可以得到前面要求的东西
x = x / 10; //每循环一次把最后一位去掉
}
return m ;
}
int isPalindrome(int n){ //求回文数
int m = 0;
m = reverse(n); //调用函数对n变量没有影响
if(m == n){
return 1;
}else{
return 0;
}
}
运行结果:
部分结果
知识点总结:
1.函数的应用
2.函数的调用
学习心得:
因为是初学小白,所以有需要改正的希望大家给我留言