水仙花数计算(0-100000)-爱代码爱编程
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int i = 0;
for (i = 0; i <= 100000; i++)
{
int n = 1;
int temp = i;
while (temp / 10)
{
n++;
temp = temp / 10;
}
temp = i;
int sum = 0;
while (temp)
{
sum += pow(temp % 10, n);
temp = temp / 10;
}
if (sum == i)
{
printf("%d ", i);
}
}
return 0;
}
不过这个不是真正的水仙花数,因为水仙花数是指一个 n 位数 ( n>=3 ),它的每个位上的数字的 n 次幂之和等于它本身,而 1、2 位数的数字本身的 n 次幂之和无法等于它们本身。
那该如何解决呐?
int main()
{
int i = 0;
for (i = 0; i <= 100000; i++)
{
int n = 1;
int temp = i;
while (temp / 10)
{
n++;
temp = temp / 10;
}
temp = i;
int sum = 0;
if (n >= 3)
{
while (temp)
{
sum += pow(temp % 10, n);
temp = temp / 10;
}
if (sum == i)
{
printf("%d ", i);
}
}
}
return 0;
}
代码中修改后,避免输出1~9的数字,n>=3时才进行计算,也可以得到正确的水仙花数结果。所以,代码已经可以正确判断并输出水仙花数了。