阶乘

时间:2022-10-08 11:43:52

#每日美图分享#

阶乘

一、求n的阶乘

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
int ret = 1;
printf("please input:");
scanf("%d", &n);
for (i = 1; i <=n; i++)
{
ret = ret * i;

}
printf("%d\n", ret);
return 0;
}

当然这里键盘输入的值不能太大,毕竟是int。

二、求1!+.......+10!

在这里我就开始出现了问题了,先献上代码:

#include<stdio.h>
int main()
{
int i = 0;
int x = 0;
int z = 1;
int sum = 0;
for (i = 1; i <= 10; i++)
{
for (x = 1; x <= i; x++)
{
z = z * x;
}
sum = sum + z;
}
printf("%d\n", sum);
return 0;
}

代码写完后为了方便验证,我就把i<=10改为了i<=3,运行结果如下:

阶乘

很明显1!+2!+3!=9;这结果并不符合!

仔细的检查后我发现z在循环后没有进行初始化,导致z在进行下一次循环时都保留了上一循环的值,致使结果偏大。(每个阶乘都应该从一开始)

修改结果如下:

阶乘

这还有另一种方法,这种方法并不需要初始化z:

#include<stdio.h>
int main()
{
int i = 0;
int x = 1;
int z = 1;
int sum = 0;
for (i = 1; i <= 10; i++)
{

for (; x <= i; x++)
{
z = z * x;
}
sum = sum + z;
}
printf("%d\n", sum);
return 0;
}


阶乘

可以看到结果一致哈(小声逼逼一句:这是我自己想出来的,嘿嘿)

好吧,其实我的方法在我老师写的代码面前啥也不是。

为我老师的代码献上膝盖!

#include<stdio.h>
int main()
{
int i = 0;
int z = 1;
int sum = 0;
for (i = 1; i <= 10; i++)
{
z = z * i;
sum = sum + z;
}
printf("%d\n", sum);
return 0;
}

完结撒花!