1. 程式人生 > >一個正整數如果等於組成它的各位數字的階乘之和,該整數稱為階乘和數。 例如,145=1!+4!+5!,則145是一個三位階詳細和數。 請問:50000內共有多少個階乘和數?所有的階乘和數(按字典序,即1打頭的在前,2打頭的次之,..., 空格分隔)

一個正整數如果等於組成它的各位數字的階乘之和,該整數稱為階乘和數。 例如,145=1!+4!+5!,則145是一個三位階詳細和數。 請問:50000內共有多少個階乘和數?所有的階乘和數(按字典序,即1打頭的在前,2打頭的次之,..., 空格分隔)


#include <stdio.h>
long jc(int x);

int main()
{
int a, b, c, d, e, f, g;
long m1, m2, m3, m4, m5, m6, n1, n2, n3, n4, n5, n6;
for(a = 1; a <= 9;a++)
{
if(a == jc(a))
printf("%d ",a);
for(b = 0;b <= 9; b++)
{
m1 = a * 10 + b;
n1 = jc(a) + jc(b);
if(m1 == n1)
printf("%ld ",m1);
for(c = 0;c <= 9; c++)
{
m2 = m1 * 10 + c;
n2 = n1 + jc(c);
if(m2 == n2)
printf("%ld ",m2);
for(d = 0; d <= 9; d++)
{
m3 = m2 * 10 + d;
n3 = n2 + jc(d);
if(m3 == n3)
printf("%ld ",m3);
for(e = 0; e <= 9; e++)
{
m4 = m3 * 10 + e;
n4 = n3 + jc(e);
if(m4 == n4)
printf("%ld ",m4);
for(f = 0; f <= 9; f++)
{
m5 = m4 * 10 + f;
n5 = n4 + jc(f);
if(m5==n5) printf("%ld ",m5);
for(g=0;g<=9;g++)
{
m6=m5*10+g;
n6=n5+jc(g);
if(m6==n6) printf("%ld ",m6);
}
}
}
}
}
}
}
}
long jc(int x)
{
int i;
long p=1;
for(i=1;i<=x;i++) p*=i;
return p;
}