回文数、素数的判定

题目如下:输出既是回文数又是素数的5位十进制数,并计算个数
分析:回文数,即偶数位时,左右对称;奇数位时,除了中间那位,左右对称。由此判断即可。函数代码如下:
int is_huiwen(int n)
{
	int i = 0, j;
	int a[1000]; // 此数组用于存储数字n的每一位。注意:此数组初始化时,若开得过大,容易爆栈。
	while (n)
	{
		a[i] = n % 10;
		n /= 10;
		i++;
	}
	for (j = 0; j < i / 2; j++, i--)
	{
		if (a[j] = a[i])
			return 0;
	}
    return 1;
}

判断素数的函数代码如下:
int is_primer(int n)
{
	if (n == 1)
		return 0;
	int m = floor (sqrt(n) + 0.5);
	for (int i = 2; i <= m; i++)
	{
		if (n % i == 0)
			return 0;
	}
	return 1;
}

综上,我们易得本题的解,代码如下:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <algorithm>
using namespace std;
int is_primer(int n); 
int is_huiwen(int n); 
const int maxn = 10;
int a[maxn];

int main()
{
	int i, j, ct = 0;
	for (i = 10000; i < 100000; i++)
	{
		if (is_primer(i) && is_huiwen(i))
		{
			cout << i << endl;
		}
	}
	return 0;
}

int is_primer(int n) // 判断素数
{
	if (n == 1)
		return 0;
	int m = floor (sqrt(n) + 0.5);
	for (int i = 2; i <= m; i++)
	{
		if (n % i == 0)
			return 0;
	}
	return 1;
}

int is_huiwen(int n) // 判断回文数
{
	int i = 0, j;
	int a[10];
	while (n)
	{
		a[i] = n % 10;
		n /= 10;
		i++;
	}
	for (j = 0; j < i / 2; j++, i--)
	{
		if (a[j] = a[i])
			return 0;
	}
    return 1;
}

猜你喜欢

转载自blog.csdn.net/qq_41705423/article/details/79370060