今天写一个经典的求水仙花数的程序
该程序可以输出N位数中所有的水仙花数
下面先给出水仙花数的定义:
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
我们现在把它的范围扩大,使其不仅限于3位数,而是N,对应的,后面就是他的每个位上的数字的N次幂之和
这里我用的int类型,只能计算到9位数,并且因为N=9时,遍历的数太多了,会很久才出完结果
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int N; //确定要的是几位数
int t,z = 0;
scanf_s("%d", &N);
int a = pow(10, N - 1);
int b = pow(10, N);
for(int i=a;i<b;i++)
{
z = i; //因为后面要对i进行分解,求各位数的N次方和,会破坏i,所以用z保存i值
t = 0; //t必须在for循环里初始化为0,不能在外面,不然每次for循环重新开始t不为0
while(z > 0)
{
t = t+pow(z % 10, N);
z = z / 10;
}
if (i == t)
{
printf("%d\n", i);
}
}
system("pause");
return 0;
}