第2个回答 2018-08-22
本人小白,多多指教
#pragma warning(disable:4996) //vs07防报错
#include <stdio.h>
#include <stdlib.h>
int factorial(int n) {
int i;
int resulta = 1;
for (i = 1; i <= n; i++) {
resulta *= i;
}
return resulta;
}
int sum(int n) {
int i;
int resultb = 0;
for (i = 1; i <= n; i++) {
resultb += factorial(i);
}
return resultb;
}
int main() {
int a, total;
printf("imput a integer:\n");
scanf("%d", &a);
total = sum(a);
printf("当n=%d,结果=%d", a, total);
system("pause");
return 0;
}
还可以写成:
#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
int sum(int n) {
int i, resulta = 1, resultb = 0;
for (i = 1; i <= n; i++) {
resulta *= i;
resultb += resulta;
}
return resultb;
}
int main() {
int a, total;
printf("imput a integer:\n");
scanf("%d", &a);
total = sum(a);
printf("当n=%d,结果=%d", a, total);
system("pause");
return 0;
}
写了两个自定义函数: factorial()用来计算阶乘,sum()用来计算累加值。
factorial()
第一部分:
n!=1x2x3...xN。设resulta=1x2x3....xN。用i表示第几次计算。
数学计算的详细步骤:
当i=1时, 1x1=1 第1次计算
当i=2时, 1x2=2 第2次计算
当i=3时, 2x3=6 第3次计算
当i=4时, 6x4=24 第4次计算
当i=n-1时 Ax(n-1)=B 第n-1次计算
当i=n时, Bxn=C 第n次计算
第二部分:
在c语言中乘法计算例如:int a=1;a=a*2意思是将a的原来的值(旧值)1x2将结果(新值)赋值给a,
a的值变为2.再进行a=a*3意思就是将a原来的值2x3将结果(新值)再次赋值给a,a的值变为6.
上面可以看出:(resulta简写为a)
i=1时,(a的旧值)1xi=(a的新值)1 。第1轮结束,a的值从旧值1变成了新值1.
(第一轮中a的新值1相对在第二轮中,看做是a的旧值,依次类推)
i=2时,(a的旧值)1xi=(a的新值)2。 第2轮结束,a的值从旧值1变成了新值2.
i=3时,(a的旧值)2xi=(a的新值)6。 第3轮结束,a的值从旧值2变成了新值6.
i=4时,(a的旧值)6xi=(a的新值)24。第4轮结束,a的值从旧值6变成了新值24.
i=n时,(a的旧值)Bxi= (a的新值)B。 第n轮结束,a的值从旧值$变成了新值$(这个新值就是最终值).
第三部分:上面可以看出:
计算a的最终值:进行了n轮,循环计算:a的旧值xi=a的新值。
将a的旧值xi=a的新值,写成代码的形式:resulta=resulta*i;即resulta*=a;
从第二部分还能看出:i的初值是i=1;i的范围是i<=n;i的变化是每次自身+1即i++;循环计算->for语句。
resulta初值是1.
int i,resulta=1;
for(i=1;i<=n;i++){
resulta*=i;
}
sum()
第一部分:
从1!+2!+3!....+n!可以看出一共有n个阶乘。设resultb=1!+2!+3!....+n!(resultb简写b)
当n=1,只有1!,0+1!=1 只有1次计算 。当n=2时有1!,2!,先计算0+1!=1再1+2!=3,有两次计算。
当n=3,有1!,2!,3!。先算0+1!=1再1+2!=3再3+3!=9,有3次计算,依次类推
当n=n,有1!,2!.....n!。会有n次计算。用i表示第几次计算。
换种写法:
当i=1时,第一次计算 0+1!值=0+1=1
当i=2时,第二次计算 1+2!值=1+2=3
当i=3时,第三次计算 3+3!值=3+6=9
当i=4时,第四次计算 9+4!值=9+24=33
当i=n-1时第n-1次计算 E+(n-1)!值=A
当i=n时,第n 次计算 A+n!值=A+B=resultb
根据c中加法的意思:
i=1, b旧+ factorial(1)=b新 调用factorial()
i=2, b旧+ factorial(2)=b新
i=n, b旧+ factorial(i)=b新
第二部分:
写成代码:resultb=resultb+ factorial(i),
1的初值i=1;i的范围i<=n;i每次自身加一i++;循环计算->for语句。
int i,resultb=0;
for(i=1;i<=n;i++){
resultb+= factorial(i)
第3个回答 推荐于2017-09-26
long fact(long n)
{
if (n == 0 | n == 1)
return 1;
else
{
return (n * fact(n - 1));
}
}
void Main()
{
int a;
printf("输入计算的阶乘:");
scanf("%u", &a);
printf("%u的阶乘为%u", a, fact(a));
}本回答被提问者采纳