C语言 - 计算n的阶乘(n!)

简介: C语言 - 计算n的阶乘(n!)

/***********************************************************************

目的:输入一个数计算它的阶乘

分析:

▶ 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; 
}



相关文章
|
5月前
|
存储 C语言
【C语言刷题每日一题#牛客网HJ73】——计算日期到天数转换(给定日期,计算是该年的第几天)
【C语言刷题每日一题#牛客网HJ73】——计算日期到天数转换(给定日期,计算是该年的第几天)
|
5月前
|
存储 安全 C语言
【C语言刷题每日一题】——求最大公约数(带数学计算过程详解)
【C语言刷题每日一题】——求最大公约数(带数学计算过程详解)
|
5月前
|
存储 C语言
【C语言刷题每日一题】——计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
【C语言刷题每日一题】——计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
|
5月前
|
C语言
C语言---试计算在区间1 到n 的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?
C语言---试计算在区间1 到n 的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?
|
5月前
|
C语言
【C语言刷题系列】计算整数的二进制位中1的个数 (三种方式)
【C语言刷题系列】计算整数的二进制位中1的个数 (三种方式)
|
5月前
|
C语言
C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
|
5月前
|
Serverless C语言
C语言----递归函数,计算一个非负整数的数字之和
C语言----递归函数,计算一个非负整数的数字之和
|
5月前
|
C语言
C语言---计算三角形的周长和面积--海伦公式
C语言---计算三角形的周长和面积--海伦公式
|
5月前
|
C语言
C语言---循环迭代---n的阶乘
C语言---循环迭代---n的阶乘
|
5月前
|
C语言
C语言---递归--求n的阶乘
C语言---递归--求n的阶乘