C语言之水仙花数
前提
题目:求出0~100000之间的所有“水仙花数”并输出
要想解决这个问题,首先要知道什么”水仙花数“
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:1 ^ 3 + 5 ^ 3+ 3 ^ 3 = 153,则153是一个“水仙花数”
思路
1 步骤一
要想求1~10000之间的“水仙花数”,首先我们得知道它是几位数的,才能计算它的n次方,我们先假设输入的数是一个五位数,然后分解它的每位数
代码如下:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int a = n / 10000; //分解万位数
int b = (n % 10000) / 1000; //分解千位数
int c = (n % 1000) / 100; //分解百位数
int d = (n % 100) / 10; //分解十位数
int e = n % 10; //分解个位数
return 0;
}
2 步骤二
其次我们要判断这个数是1位数还是n位数,然后再根据不同的位数计算他们的n次方,然后判断n次方的和是否等于它本身
代码如下:
int main()
{
int n = 0;
for (n = 0; n <= 99999; n++)
{
int a = n / 10000; //分解万位数
int b = (n % 10000) / 1000; //分解千位数
int c = (n % 1000) / 100; //分解百位数
int d = (n % 100) / 10; //分解十位数
int e = n % 10; //分解个位数
if (n >= 0 && n <= 9) //当n为一位数时,都是水仙花数
{
printf("%d ", n);
}
else if (n >= 10 && n <= 99) //当n为两位数时,判断个位 十位 的 二次方方和
{
if (e * e + d * d == n)
{
printf("%d ", n);
}
}
else if (n >= 100 && n <= 999) //当n为三位数时,判断个位 十位 百位 的 三次方方和
{
if (e * e * e + d * d * d + c * c * c == n)
{
printf("%d ", n);
}
}
else if (n >= 1000 && n <= 9999) //当n为四位数时,判断个位 十位 百位 千位 的四次方方和
{
if (e * e * e * e + d * d * d * d + c * c * c * c + b * b * b * b == n)
{
printf("%d ", n);
}
}
else //当n为五位数时,判断个位 十位 百位 千位 万位 的四次方方和
{
if (e * e * e * e * e + d * d * d * d * d + c * c * c * c * c + b * b * b * b * b + a * a * a * a * a == n)
{
printf("%d ", n);
}
}
}
return 0;
}
方法二:
可以使用pow函数来计算平方
#include <stdio.h>
#include <math.h> //使用pow函数需引用math.h头文件
int main()
{
int n = 0;
for (n = 0; n <= 99999; n++)
{
int a = n / 10000; //分解万位数
int b = (n % 10000) / 1000; //分解千位数
int c = (n % 1000) / 100; //分解百位数
int d = (n % 100) / 10; //分解十位数
int e = n % 10; //分解个位数
if (n >= 0 && n <= 9) //当n为一位数时,都是水仙花数
{
printf("%d ", n);
}
else if (n >= 10 && n <= 99) //当n为两位数时,判断个位 十位 的 二次方方和
{
if (pow(e, 2) + pow(d, 2) == n)
{
printf("%d ", n);
}
}
else if (n >= 100 && n <= 999) //当n为三位数时,判断个位 十位 百位 的 三次方方和
{
if (pow(e, 3) + pow(d, 3) + pow(c, 3) == n)
{
printf("%d ", n);
}
}
else if (n >= 1000 && n <= 9999) //当n为四位数时,判断个位 十位 百位 千位 的四次方方和
{
if (pow(e, 4) + pow(d, 4) + pow(c, 4) + pow(b, 4) == n)
{
printf("%d ", n);
}
}
else //当n为五位数时,判断个位 十位 百位 千位 万位 的四次方方和
{
if (pow(e, 5) + pow(d, 5) + pow(c, 5) + pow(b, 5) + pow(a, 5) == n)
{
printf("%d ", n);
}
}
}
return 0;
}
8964

被折叠的 条评论
为什么被折叠?



