#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void mul(char *a,char *b,char *c)
{
int i;
int j;
int ca;
int cb;
int *s;
ca=strlen(a);
cb=strlen(b);
s=(int*)malloc(sizeof(int)*(ca+cb));
for(i=0;i<ca+cb;i++)//对结果各位赋值为0
s[i]=0;
/*
for(i=0;i<ca;i++)
for(j=0;j<cb;j++)
s[i+j+1]+=(a[i]-'0')*(b[j]-'0');
*/
for(i=ca-1;i>=0;i--) //不考虑进位,进行乘法计算
for(j=cb-1;j>=0;j--)
s[i+j+1]+=(a[i]-'0')*(b[j]-'0');
for(i=ca+cb-1;i>=0;i--)//处理各位的进位
if(s[i]>=10)
{
s[i-1]+=s[i]/10;
s[i]%=10;
}
//
i=0;
while(s[i]==0) //处理前导零的情况
i++;
///
for(j=0;i<ca+cb;j++,i++)//计算最终结果
{
c[j]=s[i]+'0';
//printf("%c",c[j]);
}
c[j]='\0';
free(s);
}
int main()
{
char str1[3000];
char str2[3000];
char str3[3000];
int n,i;
memset(str1,0,sizeof(str1));
memset(str2,0,sizeof(str2));
memset(str3,0,sizeof(str3));
printf("请输入一个数:\n");
scanf("%d",&n);
sprintf(str2,"%d",1);
for(i=2;i<=n;i++)
{
sprintf(str1,"%d",i);
mul(str1,str2,str3);
strcpy(str2,str3);
}
for(i=0;i<strlen(str3);i++)
printf("%c",str3[i]);
printf("len=%d\n",strlen(str3));
return 0;
}
大数据:fac
最新推荐文章于 2024-05-04 06:27:45 发布