回文数的判断代码

注意事项

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;

}

全部评论

相关推荐

09-19 12:15
门头沟学院 Java
迷茫的大四🐶:这下是真的打牌了,我可以用感谢信和佬一起打牌吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务