水仙花数,也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.
例如: (1^3 + 5^3+ 3^3 = 153)(1634 = 1^4 + 6^4 + 3^4 + 4^4 ),(54748 = 5^5 + 4^5 +7^5 + 4^5 +8^5)。
编程核心算法:
在于如何取出整数的每一位数字。
注意点:
需要一个变量a承接输入的整数n,对a进行操作求每一位,求出的每一位的次幂累加 和 输入的整数n 比较是否相等
/*水仙花数算法*/
a=n;
while(a)
{
b=a%10;
a=a/10;
sum+=pow(b,bit);
}
例如(输入153):
a=153
第一次循环取出数字3
b=153%10=3
a=153/10=15
第二次循环取出数字5
b=15%10=5
a=15/10=1
第三次循环取出数字1
b=1%10=1
a=1/10=0(此时结束循环)
当 a为0时结束循环
#include<stdio.h>
#include<math.h>
int main()
{
int n;//输入的整数
int a;//保存输入的整数
int b;//保存得到的每一位数字
int bit=0;//标记输入的整数的位数需要初值
int sum=0;//它的每个位上的数字的 n 次幂之和 累加操作需要初值
scanf("%d",&n);
/*用来求整数的位数*/
a=n;
while(a)
{
a=a/10;
bit++;
}
/*水仙花数算法*/
a=n;
while(a)
{
b=a%10;
a=a/10;
sum+=pow(b,bit);
}
if (sum==n)
{
printf("%d是水仙花数\n",n);
}
else
printf("no\n");
return 0;
}