用c++写如下程序,要求带有注释:请按由小到大的次序输出所有满足下列要求的4位整数:①所有数字不重复②各位数字之和恰好是素数③各位数字之积能被该数整除。
时间: 2024-03-31 12:38:56 浏览: 54
```cpp
#include <iostream>
using namespace std;
// 判断一个数是否为素数
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
// 计算一个数的各位数字之和
int digitSum(int n) {
int sum = 0;
while (n) {
sum += n % 10;
n /= 10;
}
return sum;
}
// 计算一个数的各位数字之积
int digitProduct(int n) {
int product = 1;
while (n) {
product *= n % 10;
n /= 10;
}
return product;
}
int main() {
for (int i = 1000; i < 10000; i++) { // 枚举所有4位整数
int a = i / 1000; // 千位数字
int b = i % 1000 / 100; // 百位数字
int c = i % 100 / 10; // 十位数字
int d = i % 10; // 个位数字
if (a != b && a != c && a != d && b != c && b != d && c != d && // 所有数字不重复
isPrime(digitSum(i)) && digitProduct(i) % i == 0) { // 满足条件②和③
cout << i << endl;
}
}
return 0;
}
```
首先定义了三个函数,`isPrime` 判断一个数是否为素数,`digitSum` 计算一个数的各位数字之和,`digitProduct` 计算一个数的各位数字之积。
然后在 `main` 函数中,使用一个循环枚举所有的4位整数,并且将它们拆分为各个数字。对于每个数,判断是否满足条件①、②、③,满足则输出。其中条件①使用了多个条件判断,将所有数字都互相比较,判断它们是否相等。条件②使用了 `isPrime` 函数进行判断,条件③计算了各位数字之积,然后判断是否能被该数整除。最终输出符合条件的数。
阅读全文