输入整数m和n(100<= m<=n<=999),输出m~n之间的水仙花数的个数。
时间: 2023-11-06 10:09:52 浏览: 165
水仙花数是指一个 n 位数 (n≥3),它的每个位上的数字的 n 次幂之和等于它本身。因此,我们可以遍历 m~n 范围内的所有数字,检查它们是否是水仙花数。
以下是 Python 代码实现:
```python
m, n = map(int, input().split())
count = 0
for num in range(m, n+1):
digits = [int(d) for d in str(num)]
sum_of_powers = sum(digit**len(digits) for digit in digits)
if sum_of_powers == num:
count += 1
print(count)
```
代码思路:
1. 读入 m 和 n。
2. 初始化水仙花数计数器 count 为 0。
3. 遍历 m~n 范围内的所有数字。
4. 将当前数字转换为列表 digits,其中每个元素是该数字的每一位。
5. 计算每个位上数字的 n 次幂之和 sum_of_powers。
6. 如果 sum_of_powers 等于当前数字 num,则将计数器 count 加 1。
7. 输出计数器 count 的值。
相关问题
C语言输入整数m和n(100<= m<=n<=999),输出m~n之间的水仙花数的个数。
水仙花数是指一个n位数(n≥3),其各位数字的n次方之和等于该数本身。例如,153就是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。
下面是C语言代码实现:
```c
#include <stdio.h>
#include <math.h>
int main() {
int m, n, num, sum, count = 0;
printf("输入m和n:");
scanf("%d%d", &m, &n);
for(num = m; num <= n; num++) {
sum = 0;
int temp = num;
int digits = log10(num) + 1; // 计算数字位数
while(temp > 0) {
sum += pow(temp % 10, digits);
temp /= 10;
}
if(sum == num) {
count++;
}
}
printf("m~n之间的水仙花数的个数为:%d\n", count);
return 0;
}
```
首先输入m和n,然后使用for循环遍历m~n之间的整数,对于每个数字,计算各位数字的n次方之和,如果等于该数本身,则将计数器加1。最后输出计数器的值即可。
c语言输入整数m和n(100<= m<=n<=999),输出m~n之间的水仙花数的个数。所谓水仙花数,是指一个三位数,其各位数字立方和等于该数本身,例如153=1*1*1+3*3*3+5*5*5,则153是水仙花数。 输入格式: 输入数据m和n之间以空格隔开(100<=m<=n<=999) 输出格式: 以整型格式输出数据
以下是该问题的C语言解法:
```c
#include <stdio.h>
#include <math.h>
int main() {
int m, n;
scanf("%d %d", &m, &n);
int count = 0;
for (int i = m; i <= n; i++) {
int a = i / 100;
int b = (i / 10) % 10;
int c = i % 10;
if (pow(a, 3) + pow(b, 3) + pow(c, 3) == i) {
count++;
}
}
printf("%d", count);
return 0;
}
```
解释:
1. 首先读入输入的两个整数m和n。
2. 使用for循环遍历m到n之间的所有三位数。
3. 在循环中,将当前三位数i分解为百位数a、十位数b和个位数c。
4. 判断当前三位数是否是水仙花数,如果是,则将计数器count加1。
5. 最后输出计数器count的值即可。
注意事项:
1. 在判断三位数是否是水仙花数时,需要用到pow函数计算立方。
2. 在分解三位数时,可以使用整除和取模运算。
阅读全文