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

字號:

1.5.2 求所有階乘和數(shù)
    算法分析如下:
     設(shè)階乘和數(shù)的位數(shù)為n,n可以為1,2... 容易證明:n<8
     事實上,若階乘和數(shù)達(dá)到8位(或更大),階乘和(即設(shè)定每位數(shù)字都為9)也要比最小的8位數(shù)小,即:
     8X9!=8*362880<10000000
     由此可見,階乘和數(shù)最多只能為7位
     設(shè)置a,b,c,d,e,f,g共7重循環(huán),在所有1~7位整數(shù)中搜索,尋找滿足階乘和條件的數(shù),這樣可找出所有階乘和數(shù)。
    程序代碼如下:
    #include
    long jc(int x);
    void main()
    {
     int a,b,c,d,e,f,g;
     long m1,m2,m3,m4,m5,m6,n1,n2,n3,n4,n5,n6;
     printf("所有階乘和數(shù)有: ");
     for(a=1;a<=9;a++)
     {
     if(a==jc(a)) printf("%d ",a); /*1位數(shù)a滿足條件則輸出*/
     for(b=0;b<=9;b++)
     {
     m1=a*10+b;
     n1=jc(a)+jc(b);
     if(m1==n1) printf("%ld ",m1); /*判別2位數(shù)m1*/
     for(c=0;c<=9;c++)
     {
     m2=m1*10+c;
     n2=n1+jc(c);
     if(m2==n2) printf("%ld ",m2); /*判別3位數(shù)m2*/
     for(d=0;d<=9;d++)
     {
     m3=m2*10+d;
     n3=n2+jc(d);
     if(m3==n3) printf("%ld ",m3); /*判別4位數(shù)m3*/
     for(e=0;e<=9;e++)
     {
     m4=m3*10+e;
     n4=n3+jc(e);
     if(m4==n4) printf("%ld ",m4); /*判別5位數(shù)m4*/
     for(f=0;f<=9;f++)
     {
     m5=m4*10+f;
     n5=n4+jc(f);
     if(m5==n5) printf("%ld ",m5); /*判別6位數(shù)m5*/
     for(g=0;g<=9;g++)
     {
     m6=m5*10+g;