C~~
include<stdbool.h>//palindromic 回文,reversal反转,digits数字,位数
long long g_palindromic(long long t)
{
int digits[10];
int len = 0; // 位数
long long temp = t;
while (temp > 0)//1:提取逆序
{
digits[len++] = temp % 10;
temp /= 10;
}
for (int i = 0; i < len / 2; i++) // 2:反转数组,得到正序
{
int tmp = digits[i];
digits[i] = digits[len - 1 - i];
digits[len - 1 - i] = tmp;
}
long long palindrome = 0; // 3:对称回文数
int palindromeLen = 2 * len - 1; // 回文数长度
for (int i = 0; i < palindromeLen; i++)
{
int digit;
if (i < len) // 前半部分:直接取正序数组
digit = digits[i];
else // 后半部分:取前n-1位的逆序
digit = digits[2 * len - 2 - i];
palindrome = palindrome * 10 + digit;
}
return palindrome;
}
bool prime(long long n)//函2:素数判断
{
if(n2)
return true;
if(n%20||n<=1)//偶数优化
return false;
for(long long i=3;i*i<=n;i+=2)//奇数,3~√n∵已经排除偶数,跳过偶数检查
{
if(n%i==0)
return false;
}
return true;
}
int main()
{
int a;
scanf("%d",&a);
long long rev_a=g_palindromic(a);
if(prime(rev_a))
printf("prime\n");
else
printf("noprime\n");
W2
int main() {
long long n;
scanf("%lld",&n); // 读取输入的素数(题目里的 t)
long long a = n; // a 用于构建回文数,初始化为输入值
n /= 10; // 去掉输入数的最后一位,准备取高位
// 构建回文数:把 n 的高位依次拼到 a 末尾
while(n) {
a = a*10 + n %10; // 取 n 的末位,拼到 a 后面
n /= 10; // 去掉 n 当前末位,处理下一位
}
// 判断回文数 a 是否为素数,输出结果
if(check(a))
printf("prime");
else
printf("noprime");
bug:i<=sqrt(n)〤 ii<=n ✓
sqrt()数学函数执行浮点运算,返回浮点数(float,double,long double),浮点数的存储和运算天生存在精度损失
i是整数,ii也是整数运算,结果不会有截断或近似
收获:在 C 语言中, bool 类型用于表示“布尔值”(只有 真 或 假 两种状态),但它的实现和用法有一些特殊之处。

浙公网安备 33010602011771号