该问题来自社区帖:
https://bbs.csdn.net/topics/614505148找出800-1200之间所有符合以下条件的数:该数的各位数字的阶乘和为素数。按如下格式打印出所有符合条件的数: 807:8!+0!+7!=45361 817:8!+1!+7!=45361 870:8!+7!+0!=45361 871:8!+7!+1!=45361 1002:1!+0!+0!+2!=5 1012:1!+0!+1!+2!=5 1020:1!+0!+2!+0!=5 ………… 程序中包含两个函数,分别用于实现判断素数和计算阶乘。
#include <stdio.h>
int is_prime(int num) { // 判断素数函数
if (num <= 1) {
return 0;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int factorial(int num) { // 计算阶乘函数
if (num == 0) {
return 1;
}
int result = 1;
for (int i = 2; i <= num; i++) {
result *= i;
}
return result;
}
int main() {
for (int i = 800; i <= 1200; i++) {
int sum = 0;
int temp = i;
while (temp > 0) { // 计算各位数字的阶乘和
int digit = temp % 10;
sum += factorial(digit);
temp /= 10;
}
if (is_prime(sum)) { // 判断阶乘和是否为素数
printf("%d:", i);
temp = i;
while (temp > 0) { // 打印各位数字和阶乘
int digit = temp % 10;
printf("%d!", digit);
temp /= 10;
if (temp > 0) {
printf("+");
}
}
printf("=%d\n", sum);
}
}
return 0;
}