第一题:计算n的阶乘
//第一题:计算n的阶乘
int main()
{
int n,n_fac=1,i=1;//声明变量,其中n_fac表示n的阶乘的结果
scanf("%d", &n);//输入数n
for (i = 1;i <= n;i++)//for循环n次
{
n_fac = n_fac * i;//从1乘到n
}
printf("%d\n", n_fac);//打印结果
return 0;
}
这个较为简单。
第二题:计算1!+2!+3!+...+10!
第二题思路:
在第一题计算n!的基础上,进行加法循环。
//第二题
int main()
{
int n_fac = 1,i;//n_fac表示n的阶乘的结果
int anwser = 0;//anwser表示最终结果
for (int n = 1; n <= 10; n++)//外循环对n进行迭代
{
for (i = 1; i <= n; i++)//内循环用来计算n的阶乘
{
n_fac = 1;/*这里非常重要,没有就出错,因为不每次对n_fac初始化1,
那么除了会计算n的阶乘外,还会额外乘上前面已经算过的阶乘。*/
n_fac = n_fac * i;
}
anwser = anwser + n_fac;//累加
}
printf("anwser = %d\n", anwser);
return 0;
}
不过,双循环的写法会有一点繁琐,可以对代码进行优化。
第二题代码优化:
//第二题优化
int main()
{
int n_fac = 1, i;
int anwser = 0;
for (int n = 1; n <= 10; n++)
{
n_fac = n_fac * n;//利用了累乘,n!=(n-1)!*n
anwser = anwser + n_fac;
}
printf("anwser = %d\n", anwser);
return 0;
}
看起来更加简单!