求阶乘和数的问题请教高手
#include<stdio.h>
void main(void)
{
long a,b,c,d,e,f,g,i,sum;
long jc(long n);
sum=a=b=c=d=e=f=g=0;
printf("输出所有的阶乘和数:\n");
for(i=1;i<=9999999;i++)
{
a=i/1000000;//百万位上的数
b=(i-1000000*a)/100000;//十万位上的数
c=(i-1000000*a-100000*b)/10000;//万位的数
d=(i-1000000*a-100000*b-10000*c)/1000;//千位的数
e=(i-1000000*a-100000*b-10000*c-1000*d)/100;//百位的数
f=(i-1000000*a-100000*b-10000*c-1000*d-100*e)/10;//十位的数
g=i-1000000*a-100000*b-10000*c-1000*d-100*e-10*f;//个位的数
sum=0;
sum=jc(a)+jc(b)+jc(c)+jc(d)+jc(e)+jc(f)+jc(g);//调用递归阶乘函数求阶乘和
if(i==sum)//如果该数等于它每位上数的阶乘之和,输出该数
printf("%d ",i);
}
printf("\n");
}
long jc(long n)//递归求阶乘
{
if(n!=0)
if(n==1)
return 1;
else
return n*jc(n-1);
else
return 0;
}
我写的程序少输出了一个阶乘和数:40585,不知道为什么,请教各位大侠
[解决办法]
#include<stdio.h>
long jc(long n)//递归求阶乘
{
if(n <= 1)
return 1;
return n * jc(n-1);
}
void main(void)
{
long sum = 0;
printf("输出所有的阶乘和数:\n");
for(int i=0; i<10000000; i++)
{
long x=i;
sum=0;
while (x)
{
sum += jc(x % 10);
x /= 10;
}
if(i==sum)//如果该数等于它每位上数的阶乘之和,输出该数
printf("%d ",i);
}
printf("\n");
}