一个正整数如果等于组成它的各位数字的阶乘之和,该正整数称为阶乘和数。
1.说明:
试求三位阶乘和数,进而求出所有的阶乘和数。
2.程序设计:
(1).求三位阶乘和数:abc=a!+b!+c!,其中a为百位数字hundred(a!=0),b为十位数字ten,c为个位数字one。约定0!=1
由于7!=5040>999的,因此a、b、c都必定小于7.
方案一:
#include<stdio.h>
long jc(int n); /*自定义函数说明*/
void main()
{
int hundred,ten,one,m,n;
printf("三位阶乘和数有:");
for(hundred=1;hundred<=6;hundred++)
for(ten=0;ten<=6;ten++)
for(one=0;one<=6;one++)
{
m=hundred*100+ten*10+one;
n=jc(hundred)+jc(ten)+jc(one);
if(m==n) /*阶乘和条件判别*/
printf("%d\n",n);
}
getch();
}
long jc(int n)
{
int i;
long s=1;
for(i=1;i<=n;i++)
s*=i;
return(s);
}
方案二:
#include<stdio.h>
long jc(int n);
void main()
{
int hundred,ten,one,i,n;
printf("三位阶乘和数有:");
for(i=100;i<=999;i++)
{
hundred=i/100;
ten=i%100/10;
one=i%100%10;
n=jc(hundred)+jc(ten)+jc(one);
if(n==i)
printf("%d\n",n);
}
getch();
}
long jc(int n)
{
int j;
long s=1;
for(j=1;j<=n;j++)
s*=j;
return(s);
}
(2).求所有阶乘和数:设阶乘和数的位数为n,这里的n可以为1,2,…,容易证明:n<8
事实上,若阶乘和数达到8位(或者更大),阶乘和最大(即设定每位数字都为9)也要比最小的8位数小,即:8 * 9!=8 * 362880<10000000
由此可见,阶乘和数最多只可能为7位。
设置a、b、c、d、e、f、g共7重循环,在所有的1~7位数中搜索,寻找满足阶乘和条件的数。
方案一:
#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;
printf("所有的阶乘和数有:");
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(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); /*七位数满足条件则输出*/
}
}
}
}
}
}
}
getch();
}
long jc(int n)
{
int i;
long s=1;
for(i=1;i<=n;i++)
s*=i;
return s;
}
3.程序运行示例及其注意事项:
(1)中的方案一、二: 三位阶乘和数有:145
(2)中的方案: 所有的阶乘和数有:1 145 2 40585
注意:在求所有阶乘和数时不可用(1)中类似方案二的方法,因为方案二使用的前提就是数字位数已定,且最高位不为零。

本文探讨了阶乘和数的概念,即一个正整数等于其各位数字的阶乘之和。文章首先介绍了如何寻找三位的阶乘和数,并通过两种方案进行了解析,接着分析了阶乘和数的最大位数不超过7位,并列举了所有可能的阶乘和数,包括145和40585等。
1万+

被折叠的 条评论
为什么被折叠?



