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,这俩个数不相等,所以怎么是判断的。还有运行了一下,结果是成无限不循环的了。
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);
}
}
}
}
}
}
}
} {:10_266:} {:10_258:} 为什么
页:
[1]