案例描述
若整数i从左向右读与从右向左读是相同的数,且i为素数,此时称其为回文素数。所谓素数是指只能由1和它本身整除的整数。
对于偶数位的整数,只有11是回文素数。也就是说,除了11以外,所有的2位整数都不是回文素数。所有的4位整数、6位整数、8位整数中也不存在回文素数。但是三位回文素数有很多,比如:101、131、151、181、191、313等。本案例要求通过编程求出所有小于1000的回文素数。
案例分析
因为要对所有1000以内的整数进行判断,所以此处适合用循环结构语句;又因为要判断是否为素数以及判断是否为回文素数,所以一定会用到选择结构语句。此案例综合了这两个重要的知识点,请灵活运用学过的知识解决此案例。
案例实现
案例设计
(1)先采用穷举法对1000以内所有整数进行遍历,判断其是否为素数。判断一个数是否为素数的关键在于,判定整数能否被1和它自身之外的其他整数所整除,如果都不能整除,则此数为素数;
(2)如果此数为素数,则继续判断此数是两位数还是三位数;
(3)如果为两位数,则判断其十位和个位是否相同,如果相同则说明此数为回文素数;如果是三位数,则判断其百位和个位是否相同,如果相同则说明此数为回文素数;
(4)最后将所有小于1000的回文素数打印输出到屏幕上即可。
完整代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int flag;
//定义整型变量flag用来记录是否为素数,1代表是,0代表不是
int n;
int i;
for (n = 10; n < 1000; n++)
{
for (i = 2; i < n; i++)
{
flag = 1; //flag默认为1
if (n % i == 0)
{
flag = 0; //如果不符合素数要求,则把flag置为0
break; //并跳出循环
}
}
if (flag == 1) //判断是否是素数
{
if (n / 100 == 0) //判断是否是两位数
{
if (n / 10 == n % 10) //判断十位和各位是否相同
{
printf("%4d", n);
}
}
else
{
if (n / 100 == n % 10) //判断百位和个位是否相同
{
printf("%4d", n);
}
}
}
}
printf("\n");
system("pause");
return 0;
}
运行结果如下图所示。