输入两个3位的正整数m,n,输出[m,n]区间内所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身。 输入格式: 测试数据由多组,处理到文件尾。每组测试输入两个3位的正整数m,n(100≤m<n≤999)。 输出格式: 对于每组测试,若[m,n]区间内没有水仙花数则输出“none”(引号不必输出),否则逐行输出区间内所有的水仙花数,每行输出的格式具体参看输出样例。 c语言
时间: 2024-02-13 08:05:59 浏览: 87
输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。
好的,以下是C语言的解法:
```c
#include <stdio.h>
int main() {
int m, n;
while (scanf("%d %d", &m, &n) != EOF) {
int i, j, k;
int flag = 0; // 判断是否有水仙花数
for (i = m; i <= n; i++) {
j = i / 100; // 百位数
k = i % 10; // 个位数
int sum = j*j*j + (i-j*100-k*k) / 10 * (i-j*100-k*k) / 10 * (i-j*100-k*k) / 10 + k*k*k; // 计算立方和
if (sum == i) {
printf("%d\n", i); // 输出水仙花数
flag = 1;
}
}
if (!flag) printf("none\n"); // 没有水仙花数
}
return 0;
}
```
解法说明:
1. 使用while循环读入多组测试数据,直到文件结尾。
2. 对于每组测试数据,使用for循环遍历区间[m,n],并计算每个数的各位数字的立方和。
3. 如果立方和等于该数本身,则输出该数,同时将flag置为1。
4. 如果区间[m,n]内没有水仙花数,则输出"none"。
注意事项:
1. 每个输入数据后面都有一个空格,需要使用空格来分隔数据。
2. 计算立方和时需要注意,个位数的计算方式与百位数和十位数不同。
阅读全文