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) 输出格式: 以整型格式输出数据
时间: 2023-11-27 21:54:16 浏览: 81
以下是该问题的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. 在分解三位数时,可以使用整除和取模运算。
相关问题
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语言实现"水仙花数" 是指一个三位正整数,其各位上的数字的立方和等于该数本身。如:1^3+5^3+3^3=153,因此153是一个水仙花数。输入两个三位正整数a和b(其中a<=b),求[a,b]范围内水仙花数的个数。 输入输出示例 : 输入: 100,999 输出: 4
好的,我可以帮你解决这个问题。以下是 C 语言的代码实现:
```c
#include <stdio.h>
int main() {
int a, b, i, j, k, count = 0;
scanf("%d,%d", &a, &b);
for (i = a; i <= b; i++) {
j = i / 100; // 百位数
k = i % 100; // 十位数和个位数
if (i == j*j*j + (k/10)*(k/10)*(k/10) + (k%10)*(k%10)*(k%10)) {
count++;
}
}
printf("%d", count);
return 0;
}
```
解释一下代码:
1. 首先,我们使用 `scanf` 函数从标准输入中读取两个三位正整数 `a` 和 `b`。
2. 然后,我们使用 `for` 循环遍历 `[a,b]` 范围内的所有三位正整数。
3. 在循环中,我们将当前的三位数 `i` 分解成百位数 `j` 和十位数加个位数 `k`。
4. 接下来,我们判断当前的三位数 `i` 是否等于其各位数的立方和。如果是,就将计数器 `count` 加一。
5. 最后,我们输出计数器的值,即水仙花数的个数。
希望这个代码能够帮助到你!
阅读全文