实现任意数的阶乘

  1. #include<stdio.h>
  2. char * jiecheng(int n)
  3. {
  4.     int i,j,x=1,flag;
  5.     int fac[10000]={0},add[10000]={0};
  6.     char a[10000]={'0'};
  7.     if(n<=3)
  8.     {
  9.         for(i=1;i<=n;i++)
  10.         x*=i;
  11.         a[0]=x+'0';
  12.         return a;
  13.     }
  14.     else
  15.     {
  16.         fac[0]=4;fac[1]=2;
  17.         flag=1;
  18.         for(i=5;i<=n;i++)
  19.         {
  20.             add[0]=fac[0]*i/10;
  21.             for(j=1;j<=flag;j++)
  22.                 add[j]=(add[j-1]+fac[j]*i)/10;
  23.             if(add[flag]!=0)flag++;
  24.             fac[0]=fac[0]*i%10;
  25.             for(j=1;j<=flag;j++)
  26.                 fac[j]=(fac[j]*i+add[j-1])%10;
  27.         }
  28.             for(i=flag;i>=0;i--)
  29.                 a[flag-i]=fac[i]+'0';
  30.             return a;
  31.     }
  32. }
  33. void main()
  34. {
  35.     int n;
  36.     char *p;
  37.     printf("请输入要算阶乘的数: ");
  38.     scanf("%d",&n);
  39.     printf("%d!=",n);
  40.     p=jiecheng(n);
  41.     printf("%s",p);
  42. }

最近没事做了个能实现任意数阶乘的程序,感觉到挺有意思的,共同分享一下。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值