小知识,大挑战!本文正在参与「程序员必备小知识」创作活动
本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。
/***********************************************************************
目的:输入一个数计算它的阶乘
分析:
▶ 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;
}