求从1到n的各阶乘之和,非函数法(循环)和函数法
题源:信奥一本通-函数-例6.1
【题目描述】
求从1到n的各阶乘之和,即求:1!+2!+…+n!=?
【输入】
输入仅一行,一个大于零的正整数n。
【输出】
输出仅一行,即从1到n的各阶乘之和
样例:
输入:10
输出:4037913
【代码】非函数法(循环)
#include<stdio.h>
//求:1!+2!+...+n!=?
//非函数法(循环法)
int main()
{
int n,sum=0,t=1;
printf("请输入n的值:");
scanf("%d",&n);
for(int i=1;i<=n;i++)//注意到i从1不断增到n,故可利用i求各个阶乘
{
for(int j=1;j<=i;j++)//用j循环求某具体i的阶乘
{
t*=j;
}
sum+=t;
t=1;//注意记得给每次的j循环里的t初始化为1
}
printf("从1到%d的阶乘和为:%d",n,sum);
return 0;
}
【代码】函数法
#include<stdio.h>
//求:1!+2!+...+n!=?
//函数法
int jc(int);//函数声明后有分号(区别函数的声明和定义很重要地也是看这个分号)
//注意函数声明的位置:若在某主调函数内声明,则只能在该主调函数内使用;若在所有函数定义之前声明,则可在本程序中任意地方使用
int main()
{
int n,sum=0;
printf("请输入n的值:");
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
sum+=jc(i);//调用函数,用函数jc(i)来计算i的阶乘
}
printf("从1到%d的阶乘和为:%d",n,sum);
return 0;
}
int jc(int n)//函数的定义
{
int t=1;
for(int j=1;j<=n;j++)//用j循环求某具体i的阶乘
{
t*=j;
}
return t;
}