推扬网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
推扬网 门户 你问我答 查看内容

陈可雯:用C语言编写程序,求出1000的阶乘.(利用数组)

2020-8-11 18:49| 发布者: admin| 查看: 35| 评论: 0

摘要: 预言家晚报的回答: 基本思路采用累乘的方法,乘法笔算的思路,数组记录下所有乘积的位,我写了个具体如下: #include stdio.h int xcfun(int x,int d,int ws,int j,int jw,int len)//模拟笔算乘法,逐位相乘 { int k ...

预言家晚报的回答:

基本思路采用累乘的方法,乘法笔算的思路,数组记录下所有乘积的位,我写了个具体如下:

 #include <stdio.h> int xcfun(int x[],int d[],int ws[],int j,int jw,int len)//模拟笔算乘法,逐位相乘 {  int k=0;  do  {   x[k+j]=(ws[j]*d[k]+jw)%10;   jw=(ws[j]*d[k]+jw)/10;   k++;  }while(d[k]>-1);  if(jw!=0)  {   x[k+j]=jw;   k++;  };  if(k+j>len)len=k+j;  return len; }

main() {  int a[2000],b[2000],c[2000],e[2000],d[2000],ws[4];  int i,j,k,jw,len;  for(k=0;k<2000;k++){d[k]=-1;}  d[0]=1;  for(i=1;i<=100;i++)//求100的阶乘  {   ws[0]=i%1000%100%10;   ws[1]=i%1000%100/10;    ws[2]=i%1000/100;    ws[3]=i/1000;    //printf("%d %d %d\n",ws[0],ws[1],ws[2]);   for(k=0;k<2000;k++){a[k]=0;b[k]=0;c[k]=0;e[k]=0;}   len=0;   for(j=0;j<4;j++)   {    k=0,jw=0;//位数,进位    if(ws[j]!=0 && j==0)    {      len=xcfun(a,d,ws,j,jw,len);     /*xcfun函数在判断里的效果     do     {      a[k]=(ws[j]*d[k]+jw)%10;      jw=(ws[j]*d[k]+jw)/10;      k++;     }while(d[k]>-1);     if(jw!=0)     {      a[k]=jw;      k++;     }     if(k>len)len=k;     */    }    else if(ws[j]!=0 && j==1)     len=xcfun(b,d,ws,j,jw,len);    else if(ws[j]!=0 && j==2)     len=xcfun(c,d,ws,j,jw,len);    else if(ws[j]!=0 && j==3)     len=xcfun(e,d,ws,j,jw,len);   }   jw=0;   for(j=0;j<len;j++)//逐位相乘的数相加得到结果   {    //if(i==22)printf("%d,%d,%d\n",a[j],b[j],c[j]);    d[j]=(a[j]+b[j]+c[j]+e[j]+jw)%10;    jw=(a[j]+b[j]+c[j]+e[j]+jw)/10;   }   if(jw!=0)d[j++]=jw;   printf("%d的阶乘:",i);   for(k=j-1;k>-1;k--)printf("%d",d[k]);//输出得数   printf("\n");   //getch();  } }


鲜花

握手

雷人

路过

鸡蛋

最新评论

热门推荐
最新资讯

广告服务|投稿要求|禁言标准|版权说明|免责声明|手机版|小黑屋|推扬网 ( 粤ICP备18134897号 )|网站地图 | 邮箱:vayae@hotmail.com

GMT+8, 2025-5-1 12:32 , Processed in 0.172173 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

返回顶部