首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求阶乘和数的有关问题

2013-01-04 
求阶乘和数的问题请教高手#includestdio.hvoid main(void){long a,b,c,d,e,f,g,i,sumlong jc(long n)s

求阶乘和数的问题请教高手
求阶乘和数的有关问题#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");
}

热点排行