求大数阶乘代码

xuchaoroger 2003-08-30 10:27:49
求大数阶乘代码
...全文
49 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
idontlikenickname 2003-08-30
  • 打赏
  • 举报
回复


// 另外一个.
#include <stdio.h>

void main()
{
int data[40];
int digit;
int i,j,r,k;
int n;

for(i=1;i<=40;i++) /* 将数组初始值设为0 */
data[i]=0;

data[0]=1;
data[1]=1;
digit=1;

printf("Enter a number what you want to calculus : ");
scanf("%d",&n);

for(i=1;i<=n;i++)
{
for(j=1;j<=digit;j++) /* 每位上等乘上阶数 digit 决定有几位*/
data[j]*=i;
for(j=1;j<=digit;j++)
{
if(data[j]>10)
{
for(r=1;r<=digit;r++)
{
if(data[digit]>10)
digit++;
data[r+1]+=data[r]/10;
data[r]=data[r]%10;
}
}
}
printf("%d!=",i);
for(k=digit;k>0;k--)
printf("%d",data[k]);
printf("\n");
}
getch();
}

idontlikenickname 2003-08-30
  • 打赏
  • 举报
回复


// 3000!得结果超出了电脑能显示得范围,所以最好采用数组来记录每位
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXN 0X7000

int a[MAXN];

int main(int argc,char *argv[])
{
int n,m,i,j,c,t;
printf("Enter n(n>=2) :");
while(1)
{
scanf("%d",&n);
if(n>=2&&n<=3276) break;
printf("must be 2<=n<=3276");
}
a[0]=1; m=1;
for(i=2;i<=n;i++)
{
for(c=0,j=0;j<m;j++)
{
t=a[j]*i+c;
a[j]=t%10;
c=t/10;
}
while(c)
{
a[m++]=c%10;
c/=10;
}
}
printf("%d!=\n",n);
for(i=m-1;i>=0;i--) putchar(a[i]+0x30);
printf("\npress any key to continue .\n");
getch();
return 0;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧