C趣味程序(二)(04)求三位階乘和數(shù)

字號(hào):

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