/*************************************************************************
> File Name: isPrimeAndPalindromic.c
> Author:zhangji
> Mail:mrzhangji@outlook.com
> Created Time: Sun 01 Oct 2023 08:53:05 PM CST
************************************************************************/
#include<stdio.h>
const int True = 1;
const int False = 0;
int isPrime(int n){ // 判断是否是质数
// int square_root = sqrt(n); // 质数开方取整后,可能为偶数,算法错误
int i = 2;
while(i * i <= n){
if(n % i == 0) return False;
i++;
}
return True;
}
// 判断是否是回文数
int isPalindromic(int n){
int digit[5];
for(int i = 0; n != 0 && i < 5;i++){
digit[i] = n % 10;
n /= 10;
}
if(digit[0] == digit[4] && digit[1] == digit[3])
return True;
return False;
}
int main(){
int a, b;
scanf("%d%d", &a, &b);
// printf("%d%d", isPrime(a), isPalindromic(b));
while(a <= b){
if(isPrime(a) && isPalindromic(a))
printf("%d\n", a);
a++;
}
return 0;
}
分两步: 第一步计算这个数是不是质数,判断质数时这里有个技巧,只要判断到n的平方根即可,但是不能用sqrt( n ),因为对一个质数取平方根,然后舍弃小数部分(int)可能是个偶数,而质数本身是个奇数,这就导致了计算错误。可以用 i * i <= n 代替
第二部计算这个数是不是回文数,由于位数固定,所以只需算出第一位和第5位,第2位和第位是否同时相等即可。
/*************************************************************************
> File Name: isHuiWen.c
> Author:zhangji
> Mail:mrzhangji@outlook.com
> Created Time: Tue 03 Oct 2023 09:41:50 AM CST
************************************************************************/
#include<stdio.h>
int isHuiWen(int n){
int x = 0, m =n;
while(n != 0){
int end = n % 10;
x = x *10 + end;
n /= 10;
}
return x == m ;
}
int main(){
int number;
scanf("%d", &number);
for(int i = 1; i <= number;i ++){
if(isHuiWen(i)) printf("%-6d", i);
}
return 0;
}
当给定数字数位不确定时,可以用如上算法。