尽管已有推荐答案,觉得还是为你提供一个代码参考为好。这段代码可以输入系统允许长度的十进制整数,然后输出它的阶乘的位数和阶乘值!你可以在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"); }