用C语言写几个函数,算到200没有问题,再大的时间太长了。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
int result[10000];
int mul(int *a,int *b,int *c,int m,int n)
{
int i,j,k,carry=0,sum;
for(i=0;i<m+n-1;i++)
{
sum=0;
for(j=0;j<m;j++)
for(k=0;k<n;k++)
{
if(j+k==i)
sum+=a[j]*b[k];
}
sum+=carry;
c[i]=sum%10;
carry=sum/10;
}
if(carry)
{
c[i]=carry;
return (m+n);
}
else
return (m+n-1);
}
int factorial(int * ret,int n)
{
int num[5];
int temp[10000]={1};
int i,j=0,k=1,m,d;
for(i=1;i<=n;i++)
{
d=i;
while(d)
{
num[j++]=d%10;
d/=10;
}
k=mul(temp,num,ret,k,j);
for(m=0;m<k;m++)
temp[m]=ret[m];
j=0;
}
return k;
}
int add(int *a,int *b,int m)
{
int i;
int carry=0,sum;
for(i=0;i<m;i++)
{
sum=a[i]+b[i]+carry;
a[i]=sum%10;
carry=sum/10;
}
if(carry)
{
a[i]=carry;
return (m+1);
}
else
return m;
}
int factorSum(int * ret,int n)
{
int temp[10000]={0},i,k,m=0,max=0;
for(i=1;i<=n;i++)
{
k=factorial(temp,i);
max=k>m?k:m;
m=add(ret,temp,max);
}
return m;
}
int main()
{
int i;
int n=factorSum(result,20);
for(i=n;i>0;i--)
printf("%d",result[i-1]);
printf("\n");
return 0;
}