今天老师出了一道题,要我们写出1~
20阶乘之和的代码,s=1!+2!+3!+……+18!+19!+20!想了半天没想到咋分析请教一下咩
时间仓促,我就没写注释了,如果哪里不懂可以继续问
#include<stdio.h>
#define MAXN 100
int ans[MAXN],num[MAXN];
int cnt_ans,cnt_num;
void add()
{
int i;
int jinwei=0;
for(i=0;i<cnt_num;i++)
{
int temp=ans[i]+num[i]+jinwei;
ans[i]=temp%10;
jinwei=temp/10;
}
cnt_ans=cnt_num;
if(jinwei>0)
{
ans[i]=jinwei;
cnt_ans++;
}
}
void factorial(int n)
{
int i;
int jinwei=0;
for(i=0;i<cnt_num;i++)
{
int temp=num[i]*n+jinwei;
num[i]=temp%10;
jinwei=temp/10;
}
if(jinwei>0)
{
num[i]=jinwei;
cnt_num++;
}
}
void print()
{
int i;
for(i=cnt_ans-1;i>=0;i--)
{
printf("%d",ans[i]);
}
printf("\n");
}
int main()
{
int i;
ans[0]=num[0]=1;
cnt_ans=cnt_num=1;
for(i=2;i<=20;i++)
{
factorial(i);
add();
}
print();
}#include <stdio.h>
int fun(int i)
{
if(i == 1)
return 1;
return i * fun(i-1);
}
int main(void)
{
int i, sum = 0;
for(i=1; i<=20; i++)
{
sum = sum + fun(i);
}
printf("%d\n", sum);
return 0;
}
因为要计算到20的阶乘,结果值将非常大。所以可以用数组来保存数值的每一位。