1.5 階乘和數(shù)
一個(gè)正整數(shù)如果等于組成它的各位數(shù)字的階乘之和,該整數(shù)稱為階乘和數(shù)。
例如,145=1!+4!+5!,則145是一個(gè)三位階詳細(xì)和數(shù)。是否還有其它三位階乘和數(shù)?共有多少個(gè)階乘和數(shù)?
1.5.1 求三位階乘和數(shù)
試求出所有三位階乘和數(shù):m=abc=a!+b!+c!(其中a為百位數(shù)字,b為十位數(shù)字,c為個(gè)位數(shù)字。約定0!=1)。
算法分析如下:
通過循環(huán)累乘設(shè)計(jì)一個(gè)求階乘的函數(shù):jc(x)=x!
對(duì)任意一個(gè)三位數(shù)m,分解其百位數(shù)字a,十位數(shù)字b,個(gè)位數(shù)字c。條件差判別:若m等于jc(a)+jc(b)+jc(c),則作打印輸出。也可通過a,b,c三重循環(huán)組合為三位數(shù)m=a*100+b*10+c,然后作條件判別。
#include
long jc(int x);
void main()
{
int a,b,c,m,n;
printf("三位階乘和數(shù)有:");
for(a=1;a<=9;a++) /*a,b,c分別為三位數(shù)的百位、十位、個(gè)位數(shù)字*/
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{
m=a*100+b*10+c;
n=jc(a)+jc(b)+jc(c); /*階乘和條件判別*/
if(m==n) printf("%d\n",m);
}
}
long jc(int x)
{
int i;
long p=1;
for(i=1;i<=x;i++)
p*=i;
return p;
}
程序運(yùn)行結(jié)果:
三位階乘和數(shù)有:145
注:可見三位階乘和數(shù)只有一個(gè) 145
一個(gè)正整數(shù)如果等于組成它的各位數(shù)字的階乘之和,該整數(shù)稱為階乘和數(shù)。
例如,145=1!+4!+5!,則145是一個(gè)三位階詳細(xì)和數(shù)。是否還有其它三位階乘和數(shù)?共有多少個(gè)階乘和數(shù)?
1.5.1 求三位階乘和數(shù)
試求出所有三位階乘和數(shù):m=abc=a!+b!+c!(其中a為百位數(shù)字,b為十位數(shù)字,c為個(gè)位數(shù)字。約定0!=1)。
算法分析如下:
通過循環(huán)累乘設(shè)計(jì)一個(gè)求階乘的函數(shù):jc(x)=x!
對(duì)任意一個(gè)三位數(shù)m,分解其百位數(shù)字a,十位數(shù)字b,個(gè)位數(shù)字c。條件差判別:若m等于jc(a)+jc(b)+jc(c),則作打印輸出。也可通過a,b,c三重循環(huán)組合為三位數(shù)m=a*100+b*10+c,然后作條件判別。
#include
long jc(int x);
void main()
{
int a,b,c,m,n;
printf("三位階乘和數(shù)有:");
for(a=1;a<=9;a++) /*a,b,c分別為三位數(shù)的百位、十位、個(gè)位數(shù)字*/
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{
m=a*100+b*10+c;
n=jc(a)+jc(b)+jc(c); /*階乘和條件判別*/
if(m==n) printf("%d\n",m);
}
}
long jc(int x)
{
int i;
long p=1;
for(i=1;i<=x;i++)
p*=i;
return p;
}
程序運(yùn)行結(jié)果:
三位階乘和數(shù)有:145
注:可見三位階乘和數(shù)只有一個(gè) 145

