#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* dashuxiangcheng(char *a,char *b);
long long int zhuanhuan(char *str);
int main(){
char n[15000]={'\0'},kc[40000],*p;
int i;
while(scanf("%s",&n)!=EOF){
memset(kc,'\0',sizeof(kc));
kc[0]='1';
long long int op=zhuanhuan(n);
for(i=1;i<=op;i++){
char x[40000]={'\0'};
itoa(i, x, 10);
p=dashuxiangcheng(x,kc);
strcpy(kc,p);
}
printf("%s\n",kc);
memset(n,'\0',sizeof(n));
}
return 0;
}
char* dashuxiangcheng(char *a,char *b){
int i,j,k=0;
static char sum[40000]={'\0'};
memset(sum,'\0',40000);
int len1=strlen(a);
int len2=strlen(b);
int len=len1+len2;
int *a1=(int *)malloc(sizeof(int)*len1);
int *b1=(int *)malloc(sizeof(int)*len2);
int *c=(int *)malloc(sizeof(int)*len);
memset(c,0,sizeof(int)*len);
for(i=0;i<len1;i++){
a1[i]=a[len1-i-1]-'0';
}
for(i=0;i<len2;i++){
b1[i]=b[len2-i-1]-'0';
}
for(i=0;i<len2;i++){
for(j=0;j<len1;j++){
c[j+i]=a1[j]*b1[i]+c[j+i];
}
}
for(i=0;i<len;i++){
c[i+1]=(int)c[i+1]+c[i]/10;
c[i]=(int)c[i]%10;
}
for(i=len-1;i>=0;i--){
if(c[i]!=0){
k=i;
break;
}
}
for(i=k,j=0;i>=0;i--,j++)
sum[j]=c[i]+'0';
free(a1);
free(b1);
free(c);
return sum;
}
long long int zhuanhuan(char *str){
long long int ret=0;
int i=0;
int length=strlen(str);
for (; i < length; ++i)
{
ret = ret * 10 + str[i] - '0';
}
return ret;
}
求N的阶乘(0<=N<=10000)
最新推荐文章于 2021-03-09 16:23:51 发布