文章目录
前言
本系列为C语言菜鸟100道基础经典例题详解刷题系列。点滴成长,一起逆袭。
一、题目描述
求1+2!+3!+…+20!的和
二、程序分析
此程序只是把累加变成了累乘。
三、解题
(1)解题方法一
1. 思路
直接求出每个数的阶乘然后相加
2. 程序运行代码
for循环
#include<stdio.h>
int main()
{
int i,j;
double sum,jc;
for(i=1;i<=20;i++){//1+2!+3!+...+n!则for(i=1;i<=n;i++)
jc=1;//必须有!!!
for(j=1;j<=i;j++){
jc*=j;
}
sum+=jc;
}
printf("%lf",sum);
return 0;
}
do……while循环
#include<stdio.h>
int main()
{
int i,j;
double fac=1,sum=0;
for(i=1;i<=20;i++){
fac=1,j=1;
do{
fac*=j;
j++;
}while(j<=i);//求各项阶乘
sum+=fac;//求各项阶乘之和
}
printf("%lf",sum);
printf("\n");
return 0;
}
3.程序运行结果
2561327494111820313.000000
(2)解题方法二
1. 思路
递归
算出前一项的阶乘并保存,在算后一项阶乘只需要乘以后一项的那个数就行
例如: 已知4! 求5! 则是4!*5
2. 程序运行代码(1)推荐方法
#include<stdio.h>
int main()
{
int i;
double fac=1,sum=0;
for(i=1;i<=20;i++){
fac=fac*i;//求各项阶乘
sum+=fac;//求各项阶乘之和
}
printf("%lf",sum);
printf("\n");
return 0;
}
2. 程序运行代码(2)
#include<stdio.h>
double Fun(double n)
{
if(n == 0)
return 1;
else
return n*Fun(n - 1);
}
int main(void)
{
double sum = 0, i;
for(i = 1;i <= 20; i++)
{
sum += Fun(i);
}
printf("%lf\n",sum);
return 0;
}
3. 程序运行结果
2561327494111820300.000000