栈实现判断一个数是不是逆素数并用c语言写出代码
时间: 2024-09-19 19:15:36 浏览: 23
栈是一种线性数据结构,通常用于后进先出(LIFO,Last In First Out)的操作。判断一个数是否为逆素数,即其各位数字之和也是质数的过程,可以通过将数字拆分成各个位,然后依次入栈,再一个个弹出计算和,如果这个和始终是质数,那么原数就是逆素数。
下面是一个简单的 C 语言实现:
```c
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
bool is_prime(int num) {
if (num <= 1)
return false;
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0)
return false;
}
return true;
}
bool is_reversible_prime(int num) {
int stack[100]; // 假设最多有三位数
int top = -1;
while (num > 0) {
stack[++top] = num % 10;
num /= 10;
}
bool is_prime_sum = true;
while (!stack.empty()) {
int sum = 0;
while (top >= 0 && is_prime(sum + stack[top])) {
sum += stack[top];
top--;
}
if (!is_prime(sum))
is_prime_sum = false;
}
return is_prime_sum;
}
int main() {
int number;
printf("Enter a number: ");
scanf("%d", &number);
if (is_reversible_prime(number))
printf("%d is a reversible prime.\n", number);
else
printf("%d is not a reversible prime.\n", number);
return 0;
}
```
在这个代码里,我们首先定义了一个 `is_prime` 函数检查一个数是否是质数。接着,我们用栈存储输入数字的每一位,并通过不断从栈顶减去元素并加到 `sum` 上来尝试构成质数。如果任何时候 `sum` 不是质数,我们就立即返回 `false`。最后,如果所有情况下都能得到质数的和,就说明原数是逆素数。