服务器之家

服务器之家 > 正文

使用C语言求N的阶乘的方法

时间:2021-03-06 14:37     来源/作者:低调小一

用递归法求N的阶乘

程序调用自身称为递归( recursion).它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解.

递归的能力在于用有限的语句来定义对象的无限集合。

一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
 
#include <string.h>
 
#include <stdlib.h>
 
long factorial(int n)
 
{
 
  if(n == 1)
 
    return 1;
 
  else
 
    return n*factorial(n-1);
 
}
 
int main(int argc,char *argv[])
 
{
 
  int n = 0;
 
  if(argc != 2)
 
  {
 
    printf("input error,exit!!\n");
 
    return -1;
 
  }
 
  n = atoi(argv[1]);
 
  printf("%d! = %ld\n",n,factorial(n));
 
  return 0;
 
}

习题示例

题目

    题目描述: 
     输入一个正整数N,输出N的阶乘。 
    输入: 
    正整数N(0<=N<=1000) 
    输出: 
     输入可能包括多组数据,对于每一组输入数据,输出N的阶乘 
    样例输入: 
    4 
    5 
    15 
    样例输出: 
    24 
    120 
    1307674368000 

 

AC代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
  
#define MAX 3000
  
//存储每次阶乘运算的结果
int str[MAX];
  
void calculateFactorial(int n);
  
int main()
{
  int n;
  
  while (scanf("%d", &n) != EOF) {
    if(n == 0) {
      printf("1\n");
    } else {
      calculateFactorial(n);
    }
  }
  
  return 0;
}
  
void calculateFactorial(int n)
{
  int i, j, temp, c, len;
  
  memset(str, 0, sizeof(str));
  str[1] = 1;
  
  for (i = 2, len = 1; i <= n; i ++) { //循环与2,3,..n相乘
    for (j = 1, c = 0; j <= len; j ++) { //str数组代表一个数,模拟与i相乘
      temp = str[j] * i + c;
      str[j] = temp % 10;
      c = temp / 10;
    }
    while(c > 0)
    {
      str[j ++] = c % 10;
      c /= 10;
    }
    len = j - 1;
  }
  
  for (i = len; i >= 1; i --) {
    printf("%d", str[i]);
  }
  printf("\n");
}

    /**************************************************************
        Problem: 1076
        User: wangzhengyi
        Language: C
        Result: Accepted
        Time:2150 ms
        Memory:916 kb
    ****************************************************************/

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部