7 .编程实现:编辑函数求水仙花数。要求通过main函数控制数值范围(即求出某范围内的水仙花数)。
1
供参考:
#include <stdio.h>
#include <math.h>
int main()
{
int N, i, p, t, sum, n, m, k;
do {
printf("input num(3<= N <=7):");
scanf("%d", &N);
} while (N < 3 || N > 7);
for (i = pow(10, N - 1), p = i * 10; i < p; i++) {
for (sum = 0, t = i; t > 0; t /= 10) {
m = N; k = 1;
n = t % 10;
while (m--)k *= n;
sum += k;
}
if (sum == i)
printf("%d\n", i);
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:#include <stdio.h>
int narcissistic( int number );
void PrintN( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
return 0;
}
在程序后面完成自己的函数
参考代码如下,可以直接复制粘贴到C语言IDE中运行:
#include <stdio.h>
#include <math.h>
// 判断一个数是否为水仙花数
int isNarcissistic(int num) {
int a = num / 100; // 百位数
int b = num % 100 / 10; // 十位数
int c = num % 10; // 个位数
int sum = pow(a, 3) + pow(b, 3) + pow(c, 3);
if (sum == num) { // 是水仙花数
return 1;
} else { // 不是水仙花数
return 0;
}
}
// 按照数值范围求解水仙花数
void findNarcissisticInRange(int start, int end) {
for (int i = start; i <= end; i++) {
if (isNarcissistic(i)) { // 是水仙花数
printf("%d ", i);
}
}
printf("\n");
}
int main() {
int start = 100, end = 999;
findNarcissisticInRange(start, end);
return 0;
}
代码说明:
isNarcissistic
,另一个是按照数值范围求解水仙花数的函数 findNarcissisticInRange
。isNarcissistic
函数首先分别提取出三个数位,然后计算对应的立方和并与原来的数进行比较,如果相等则是水仙花数,返回 1,否则返回 0。findNarcissisticInRange
函数利用循环遍历给定数值范围内的每一个数,然后调用 isNarcissistic
函数判断是否为水仙花数,如果是则输出这个数。findNarcissisticInRange
函数求解并输出水仙花数。运行结果:
153 370 371 407
可以看到,输出结果正确地列出了在 100~999 范围内的所有水仙花数。