找到既是回文数又是素数的数

【题目】

  一个数如果从左往右读和从右往左读数字是完全相同的,则称这个数为回文数,比如898,1221,15651都是回文数。

  编写一个程序,输入两个整数min和max,然后对于min~max之间的每一个整数(包括min和max),如果它既是一个回文数又是一个质数,那么就把它打印出来。要求,回文数和质数的判断都要用函数的形式来实现。

【输入】

min max

【输出】

min和max之间所有满足要求的数。一个数占一行

【分析】

题目要求通过两个函数来实现对回文数和质数的判断,那么可以写两个bool函数来进行判断

回文数的判断

如果用int型来进行判断,那么我们最好用数组来存储每一位的数据,通过while循环来得到x的每一位数据,然后再判断是不是回文数

质数的判断

对于质数来说,它的约数只有自己本身和1,对于非质数来说,它的约束一定一个大于sqtr(x),一个小于sqrt(x),我们只需要判断数x能否被小于sqrt(x)的数整除即可

【代码】
#include<stdio.h>
#include<cmath.h>
//判断是不是回文数
bool IsPalindrome(int x) {
	//用sum数组来存储x的每位数据
	//因为是int型 所以10个单位就够了
	int sum[10];
	//size 表示x的位数
	int size=1;
	//读取x的每一位数据
	while(x) {
		sum[size]=x%10;
		x/=10;
		size++;
	}
	for(int i=1; i<=size/2; i++) {
		//如果不满足回文数 直接返回false
		if(sum[i]!=sum[size-i])
			return false;
	}
	return true;
}
//判断是不是质数
bool IsPrime(int x) {
	if(x<2)
	return false;
	for(int i=2; i<=sqrt(x); i++) {
		//如果x能被i整除 那么就不是质数
		if(x%i==0) {
			return false;
		}
	}
	return true;
}
int main() {
	int min,max;
	scanf("%d %d",&min,&max);
	//遍历min-max
	for(int i=min; i<=max; i++) {
		//如果 既是回文数 又是质数 就输出
		if(IsPalindrome(i) && IsPrime(i)) {
			printf("%d\n",i);
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值