题目
作者 Tower
单位 成都大学
输入一个字符串(长度不超出60个字符),其中包含不超出18个数字字符。请提取出数字得到一个整数,判断它是否是质数,及是否是回文数字。
输入格式:
输入一个字符串(长度不超出60个字符)
输出格式:
输出3行:第1行是提取出的数字;
第2行输出是否是质数(“YES"或"NO”);
第3行输出是否是回文数字(“YES"或"NO”)。
输入样例:
在这里给出一组输入。例如:
They are 12 and 1.
输出样例:
在这里给出相应的输出。例如:
121
NO
YES
代码
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
// 判断是否是质数
bool isPrime(unsigned long long int num) {
if (num <= 1) return false;
for (long long int i = 2; i * i <= num; i++) {
if (num % i == 0) return false;
}
return true;
}
// 判断是否是回文数字
bool isPalindrome(unsigned long long int num) {
unsigned long long int original = num;
unsigned long long int reverse = 0;
while (num > 0) {
int digit = num % 10;
reverse = reverse * 10 + digit;
num /= 10;
}
return original == reverse;
}
int main() {
char input[61];
gets(input);
unsigned long long int num = 0;
int len = strlen(input);
for (int i = 0; i < len; i++) {
if (input[i] >= '0' && input[i] <= '9') {
num = num * 10 + (input[i] - '0');
}
}
printf("%llu\n", num);
printf("%s\n", isPrime(num) ? "YES" : "NO");
printf("%s\n", isPalindrome(num) ? "YES" : "NO");
return 0;
}