三九宝宝网宝宝教育教学论文

用c语言求阶乘50!的具体数值及其位数并输出结果

01月06日 编辑 39baobao.com

尽管已有推荐答案,觉得还是为你提供一个代码参考为好。这段代码可以输入系统允许长度的十进制整数,然后输出它的阶乘的位数和阶乘值!你可以在VC++6.0中试试……

#include "stdio.h"

#include "string.h"

#include "math.h"

#include "stdlib.h"

void main(void){

char *pResult,*pSect,*p,pTemp[12];

int ln,n,i,j,lp,lm,k;

double lDec=0;

printf("请输入阶乘数...\nnDec=");

scanf("%d",&n);

ln=n;

while(ln>1) lDec+=log10(ln--);//求需要的空间

ln=(int)lDec+1;

if(n==1 || n==0){

printf("%d!长1位...\n%d!=1\n",n,n);

exit(0);

}

else printf("%d!长%d位...\n%d!=",n,ln,n);

lp=strlen(ltoa(n,pTemp,10));

if(!(p=(char *)malloc(lm=2*(ln+lp)+2))){//申请内存

printf("申请内存失败!\n");

exit(0);

}

memset(p,0,lm);

pResult=p+1;

pSect=p+ln+2;

strcpy(pSect,pTemp);

for(i=0;i

while(--n>1){

ltoa(n,pTemp,10);

memset(pResult,0,lp);

for(i=0;lp--;i++){ //模拟竖式乘法--n>1

for(j=0;pTemp[j];j++)//转为整形求位积存储

pResult[i+j]+=pSect[i]*(pTemp[j]&15);

k=i+j;

for(j=k-1;j>0;j--){

if(pResult[j]>9){

pResult[j-1]+=(pResult[j]-pResult[j]%10)/10;

pResult[j]%=10;

}

}

}

i=0;

while(*pResult>9){

pResult--;

*pResult=(pResult[1]-pResult[1]%10)/10;

pResult[1]%=10;

k++;

i++;

}

memcpy(pSect,pResult,k);//将部分积作为被乘数

pResult+=i;

lp=k;

}

for(i=0;i

free(p);//释放空间

printf("\n");

}

推荐阅读
图文推荐