慕哥3271118
2017-09-19 22:32
今天老师出了一道题,要我们写出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的阶乘,结果值将非常大。所以可以用数组来保存数值的每一位。
C语言入门
926876 学习 · 21241 问题
相似问题