十全数是指如果一个数包含了 0~ 9 这十个数字,就称为十全数。给定 N,找一个最小的正整数 M,使 N^M(表示 N 的 M 次方)为十全数。c++AC代码
时间: 2024-02-13 07:00:48 浏览: 40
这是一个 AC 代码,和之前的代码大同小异,只是输出了一些提示信息。
```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;
cout << "请输入正整数 N:" << endl;
cin >> n;
int m = 1;
while (!check(pow(n, m), m)) {
m++;
}
cout << "N 的最小幂次为:" << m << endl;
return 0;
}
```
相关问题
十全数是指如果一个数包含了 0~ 9 这十个数字,就称为十全数。给定 N,找一个最小的正整数 M,使 N^M(表示 N 的 M 次方)为十全数。c++代码
以下是一个简单的 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++;
}
cout << m << endl;
return 0;
}
```
对于给定的正整数 $N$,我们从 $M=1$ 开始尝试计算 $N^M$ 并检查其是否为十全数。我们可以使用一个布尔数组 `digits` 来记录数字 $0-9$ 是否出现过,然后统计出现过的不同数字的数量 `cnt`。如果 `cnt` 大于等于 $10$,那么 $N^M$ 就是一个十全数,输出 $M$ 即可。如果不是,就将 $M$ 加 $1$ 继续尝试。
需要注意的是,题目要求找到最小的 $M$,因此我们可以从 $M=1$ 开始尝试,一旦找到一个符合要求的 $M$,就直接输出并结束程序。
(9) 编写程序,计算下列公式中s的值(n是运行程序时输入的一个正整数)。 s=1+(1+2)+(1+2+3)+ \dotsc +(1+2+3+ \dotsc +n) 全数”指这个数等于它的因子
答案:
可以通过两层循环来计算每个数的因子个数,然后再将所有“全数”的值相加即可得到s的值。
代码如下:
```python
n = int(input())
s = 0
for i in range(1, n+1):
count = 0
for j in range(1, i+1):
if i % j == 0:
count += 1
if count == i:
s += i
print(s)
```
输入示例:
```
10
```
输出示例:
```
6
```
解释:
1是全数,因子个数为1。
2不是全数,因子个数为2。
3是全数,因子个数为2。
4不是全数,因子个数为3。
5不是全数,因子个数为2。
6不是全数,因子个数为4。
7不是全数,因子个数为2。
8不是全数,因子个数为4。
9不是全数,因子个数为3。
10不是全数,因子个数为4。
而s=1+3+6=6。