任意的整数,当从左向右读与从右向左读是相同的,且为素数时,称为回文素数。
输入一个整数判断是否是回文数
算法思想:
① 获取一个数,例如123
② 求出321与123相比
③ 求123中的个位数:3 -> 123%10/1
十位数:2 -> 123%100/10
百位数:1 -> 123%1000/100
通式:num %(10*i)/i
④将321 = 3 * 100 +2 * 10 + 1
⑤定义一个snum用来存储倒置的数,即:snum = 321,snum = num % (10 * i) / i + 10 * snum;
第一次循环:s = 3 + 0
第二次循环:s = 2 + 30
第三次循环:s = 1 + 320
⑥对比num 和 snum的值。
#include <stdio.h>
int main(void) {
int i, num;
int snum = 0; //用来存放倒置的数
printf("请输入一个整数:");
scanf("%d", &num);
for (i = 1; i < num; i *= 10) { //i每次增加10倍,实现个位,十位,百位。。。的转化换
snum = num % (10 * i) / i + 10*snum;
//s = 3 + 0
//s = 2 + 30
//s = 1 + 320
}
if (num == snum)
printf("这个数是一个回文数\n");
else
printf("这个数不是一个回文数\n");if (num == snum)
printf("这个数是一个回文数\n");
else
printf("这个数不是一个回文数\n");
return 0;
}
输出结果:
请输入一个整数:121
这个数是一个回文数
求 1000 以内的所有回文素数。
算法思想:
实例的重点是判断一个数是否是回文素数。要输出 1000 以内的所有回文素数,首先应判断这个数是否是素数;如果是,再进一步判断这个数是两位数还是三位数,若是两位数,则需判断个位数和十位数是否相同;若是三位数,则需判断个位数和百位数是否相同。若相同,则判断为回文素数,否则继续下次判断。
① 定义一个函数 sushu,其作用是判断一个数是否是素数。
② 对判断为素数的数,再判断其是否是两位数。
若是两位数,再判断其个位数和十位数是否相同,若相同则打印输出;若不相同,则执行④;若不是两位数,则执行③。
③ 若是三位数,则判断其个位数和百位数是否相同。若相同,则打印输出;若不相同,则执行 ④。
④ 循环控制变量 i 自增 1。
⑤ 直到 i 自增至 1000 结束。
#include <stdio.h>
#include <stdio.h>
/*判断参数n是否为素数*/
int fun(int n) {
int i;
for (i = 2; i < (n - 1) / 2; ++i) {
if (n % i == 0)
return 0;
}
return 1;
}
int main(void) {
int i;
for (i = 10; i < 1000; ++i) { //10以内没有回文素数
if (fun(i) == 1) { //素数
if (i / 100 == 0) { //100以内的
if (i / 10 == i % 10) //对比十位和个位
printf("%5d", i);
if (i % 5 == 0)
printf("\n");
} else {
if (i / 100 == i % 10) //对比百位和个位
printf("%5d", i);
if (i % 5 == 0)
printf("\n");
}
}
}
return 0;
}
输出结果:
11 101 131 151 181 191 313 353 373 383 727 757 787 797 919 929
技术要点:
① 程序由 main() 函数和 sushu() 函数组成,main() 函数调用 sushu() 函数,整型变量 i 为函数参数。当 sushu () 执行完后,返回到主函数中继续执行被调函数后面的语句。
② 函数调用语句由函数名、实际参数加上分号“;”组成。其一般形式为“函数名(实际参数表);”。执行函数语句就是调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,求取函数值。