阶乘和数:
一个正整数如果等于组成它的各位数字的阶乘之和,该整数称为阶乘和数。
例如,145=1!+4!+5!,则145是一个三位阶详细和数。
请问:共有多少个阶乘和数? 数据范围 1<=x <= 1 e 7
输出:
所有的阶乘和数(按字典序,即1打头的在前,2打头的次之,…, 空格分隔)
(多加for循环,然后实现数字的从1打头的数字直至9打头的数字顺序打印)
问题思路:
#include<stdio.h>
long jc(int n);
void main()
{
int a, b, c, d, e, f, g;
long int 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++) //加用多个for函数循环的目的是保证题目中的打印顺序
{
m1 = a * 10 + b;
n1 = jc(b) + jc(a);
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 == n2)
printf("%ld ", m3); /*四位数满足条件则输出*/
for (e = 0; e <= 9; e++)
{
m4 = m3 * 10 + e;
n4 = n3 + jc(e);
if (m4 == n3)
printf("%ld ", m4); /*五位数满足条件则输出*/
for (f = 0; f <= 9; f++)
{
m5 = m4 * 10 + f;
n5 = n4 + jc(f);
if (m5 == m4)
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 n) //用户自己定义阶乘函数
{
int i;
long s = 1;
for (i = 1; i <= n; i++)
s *= i;
return s;
}
(注意到,7!=5040>999,所以7的阶乘为四位数不满足,)