回文数的判断代码
注意事项
isPrime函数使用了一种常见的优化方法,即跳过能被2和3整除的数,只检查6k±1形式的数。
generatePalindrome函数中,reversed数组应该初始化所有元素为0,以确保字符串正确终止。否则,如果x是一个很大的数,可能会导致未定义行为。
sprintf函数用于将数字转换为字符串和拼接字符串,但需要注意缓冲区溢出的问题。确保目标缓冲区足够大以避免溢出。
atoll函数用于将C字符串转换为长长整型数
代码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int isPrime(long long x) {
if (x <= 1) return 0;
if (x == 2 || x == 3) return 1;
if (x % 2 == 0 || x % 3 == 0) return 0;
for (long long i = 5; i * i <= x; i += 6) {
if (x % i == 0 || x % (i + 2) == 0) return 0;
}
return 1;
}
long long generatePalindrome(long long x) {
char str[50];
sprintf(str, "%lld", x);
int len = strlen(str);
char reversed[50];
for (int i = len - 1; i >= 0; i--) {
reversed[len - 1 - i] = str[i];
}
reversed[len] = '\0';
char palindrome[100];
sprintf(palindrome, "%s%s", str, reversed + 1);
return atoll(palindrome);
}
int main() {
long long t;
scanf("%lld", &t);
long long palindrome = generatePalindrome(t);
if (isPrime(palindrome)) {
printf("prime\n");
} else {
printf("noprime\n");
}
return 0;
}

查看2道真题和解析
