尽管已有推荐答案,觉得还是为你提供一个代码参考为好。这段代码可以输入系统允许长度的十进制整数,然后输出它的阶乘的位数和阶乘值!你可以在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("请输入阶乘数。
。。
nDec=");
scanf("%d",&n);
ln=n;
while(ln>1) lDec =log10(ln--);//求需要的空间
ln=(int)lDec 1;
if(n==1 || n==0){
printf("%d!长1位。
。。
%d!=1
",n,n);
exit(0);
}
else printf("%d!长%d位。。。
%d!=",n,ln,n);
lp=strlen(ltoa(n,pTemp,10));
if(!(p=(char *)malloc(lm=2*(ln lp) 2))){//申请内存
printf("申请内存失败!
");
exit(0);
}
memset(p,0,lm);
pResult=p 1;
pSect=p ln 2;
strcpy(pSect,pTemp);
for(i=0;i1){
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;
pResult[j]%=10;
}
}
}
i=0;
while(*pResult>9){
pResult--;
*pResult=(pResult[1]-pResult[1])/10;
pResult[1]%=10;
k ;
i ;
}
memcpy(pSect,pResult,k);//将部分积作为被乘数
pResult =i;
lp=k;
}
for(i=0;i
free(p);//释放空间
printf("
");
}。
全部