十全数是指如果一个数包含了 0~ 9 这十个数字,就称为十全数。给定 N,找一个最小的正整数 M,使 N^M(表示 N 的 M 次方)为十全数若无解,输出“No”,否则输出 M。c++代码
时间: 2024-02-13 20:00:49 浏览: 178
c++ 输入十个整数 升序输出
5星 · 资源好评率100%
以下是一个简单的 C++ 解法:
```c++
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
bool check(int n, int m) {
bool digits[10] = {false};
int cnt = 0;
while (n > 0) {
int digit = n % 10;
if (!digits[digit]) {
digits[digit] = true;
cnt++;
}
n /= 10;
}
return cnt >= 10;
}
int main() {
int n;
cin >> n;
int m = 1;
while (!check(pow(n, m), m)) {
m++;
if (m > 100000) {
cout << "No" << endl;
return 0;
}
}
cout << m << endl;
return 0;
}
```
对于给定的正整数 $N$,我们从 $M=1$ 开始尝试计算 $N^M$ 并检查其是否为十全数。我们可以使用一个布尔数组 `digits` 来记录数字 $0-9$ 是否出现过,然后统计出现过的不同数字的数量 `cnt`。如果 `cnt` 大于等于 $10$,那么 $N^M$ 就是一个十全数,输出 $M$ 即可。如果不是,就将 $M$ 加 $1$ 继续尝试。如果 $M$ 大于 $100000$,我们就认为无解,输出 "No" 并结束程序。
需要注意的是,题目要求找到最小的 $M$,因此我们可以从 $M=1$ 开始尝试,一旦找到一个符合要求的 $M$,就直接输出并结束程序。
阅读全文