第一题:计算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;
}

看起来更加简单!