乔宽 发表于 2019-9-30 17:13:54

C语言程序,求所有阶乘和数

long jc(int x)
{
   int i ; long p = 1;
for(i = 1;i<= x; i++)
    p*=i;
return (p);
}
#include <stdio.h>
int main()
{
int a,b,c,d,e,f,g;
long m1, m2, m3, m4, m5, m6, n1, n2, n3, n4, n5, n6;
printf("所有阶乘和数有: ");
for(a=1;a<=9;a++)
{if(a=jc(a))
printf("%ld", a);
for(b=0;b<=9;b++)
{
m1=a*10+b;n1= jc(a)+jc(b);
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 == n3)
printf("%ld",m3);
for (e=0;e<=9;e++)
{ m4=m3*10+e;n4 = n3+ jc(e);
if(m4==n4)
printf("%ld ",m4);
for(f=0;f<=9;f++)
{
m5=m4*10+f;n5=n4+jc(f);
if(m5==n5)
printf("%ld ",m5);
for(g = 0;g < 9;g++)
{
m6=m5*10 + g;n6 = n5 + jc(g);
if(m6 == n6);
printf("%ld",m6);
}}}}}}}}

这个程序是我从至美|C语言程序|中学到得,书上写着有145,但这个程序在判断第二位数时,m1 = 15;n1 = 25,这俩个数不相等,所以怎么是判断的。还有运行了一下,结果是成无限不循环的了。

superbe 发表于 2019-9-30 18:54:44

long jc(int x)
{
        int i ;
        long p = 1;
        for(i = 1;i<= x; i++)
                p*=i;
        return (p);
}

#include <stdio.h>

int main()
{
        int a,b,c,d,e,f,g;
        long m1, m2, m3, m4, m5, m6, n1, n2, n3, n4, n5, n6;
        printf("所有阶乘和数有: ");
        for(a=1;a<=9;a++)
        {
                if(a==jc(a))    //修改前是a=jc(a)
                        printf("%ld ", a);
                for(b=0;b<=9;b++)
                {
                        m1=a*10+b;n1= jc(a)+jc(b);
                        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 == n3)
                                                printf("%ld ",m3);
                                        for (e=0;e<=9;e++)
                                        {
                                                m4=m3*10+e;n4 = n3+ jc(e);
                                                if(m4==n4)
                                                        printf("%ld ",m4);
                                                for(f=0;f<=9;f++)
                                                {
                                                        m5=m4*10+f;n5=n4+jc(f);
                                                        if(m5==n5)
                                                                printf("%ld ",m5);
                                                        for(g = 0;g <= 9;g++)    //修改前是g<9
                                                        {
                                                                m6=m5*10 + g;n6 = n5 + jc(g);
                                                                if(m6 == n6)    //修改前多了一个分号,导致不停输出
                                                                printf("%ld ",m6);
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
}

心驰神往 发表于 2020-11-3 15:53:29

{:10_266:}

心驰神往 发表于 2020-11-3 15:54:03

{:10_258:}

心驰神往 发表于 2020-11-3 15:54:37

为什么
页: [1]
查看完整版本: C语言程序,求所有阶乘和数