#每日美图分享#
一、求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;
}
完结撒花!