P1009 [NOIP1998 普及组] 阶乘之和
菜鸟生成记(27)
这一题考察大数乘法(阶乘)和加法;模拟手写乘法和加法
#include<stdio.h>
#define max(x,y) x>y?x:y
#define N 10000
int a[N];
int s[N]={0};
int fun(int n)
{
int count=1,f,t;
a[0]=1;
for(int i=1;i<=n;i++)
{
f=0;
for(int j=0;j<count;j++)
{
t=a[j]*i+f;
a[j]=t%10;
f=t/10;
}
while(f)
{
a[count]=f%10;
f=f/10;
count++;
}
}
return count;
}
void fun1(int len)
{
int t=0;
for(int i=0;i<len;i++)
{
t=t+s[i]+a[i];
s[i]=t%10;
t/=10;
}
if(t!=0)
s[len]=t;
}
int main()
{
int n,len=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
len=max(len,fun(i));
fun1(len);
}
for(int i=len-1;i>=0;i--)
printf("%d",s[i]);
return 0;
}