/***********************************************************************
目的:输入一个数计算它的阶乘
分析:
▶ 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; }