计算n的阶乘(n!)

299 阅读1分钟

小知识,大挑战!本文正在参与「程序员必备小知识」创作活动

本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

/***********************************************************************
目的:输入一个数计算它的阶乘
分析:

▶ 3! = 1 * 2 * 3

▶ 4! = 1 * 2 * 3 * 4

▶ 5! = 1 * 2 * 3 * 4 * 5

平台:Visual studio 2017 && windows
*************************************************************************/

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

/***********************************************************************
目的:1! + 2! +3! + ...
分析:
1    +
1 * 2    +
1 * 2 * 3 +
... ...
平台:Visual studio 2017 && windows *************************************************************************/

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	int ret = 1;
	int sum = 0;
	int n = 0;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		ret = 1;//在求下一个阶乘时重新赋值,避免把上一阶乘的值与下一阶乘的值重复相乘
		for (j = 1; j <= i; j++)
		{
			ret *= j;
		}
		sum += ret;
	}
	printf("%d\n", sum);
	return 0;
}

/***********************************************************************
目的:优化:1! + 2! +3! + ...
分析:上面这种写法时间复杂度高,效率低。优化如下:
1 * 1 = 1!
1! * 2 = 2!
2! * 3 = 3!
3! * 4 = 4!
... ...
平台:Visual studio 2017 && windows *************************************************************************/

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