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 19:54:16 浏览: 34
以下是该问题的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语言输入整数m和n(100<= m<=n<=999),输出m~n之间的水仙花数的个数。所谓水仙花数,是指一个三位数,其各位数字立方和等于该数本身,例如153=1*1*1+3*3*3+5*5*5,则153是水仙花数。
以下是C语言代码实现:
```c
#include <stdio.h>
int main() {
int m, n, i, j, k, count = 0;
printf("请输入m和n(100<=m<=n<=999):");
scanf("%d%d", &m, &n);
for (i = m; i <= n; 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 ", i);
}
}
printf("\n%d到%d之间的水仙花数的个数为:%d\n", m, n, count);
return 0;
}
```
程序先读取输入的m和n,然后使用for循环遍历m~n范围内的所有整数,对于每个整数,按照水仙花数的定义计算其百位数、十位数和个位数的立方和,如果等于该数本身,则说明该数是水仙花数,计数器加1。最后输出水仙花数的个数以及所有的水仙花数。