【蓝桥】学前热身题:阶乘计算

题目描述

题目描述

给定一个正整数 n,求出 n! 的值。

输入描述

输入一个正整数 n,n<=1000。

输出描述

输出n!。

输入输出样例

示例

输入

1
10

输出

1
3628800

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

解题

源码

C++

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
#include <iostream>
using namespace std;

int A[10000] = {0};

int main()
{
A[0] = 1;
int n = 0;
int p = 0;
int tail = 0;
cin >> n;
for (int i = 2; i <= n; i++) {
p = 0;
for (int j = 0; j < 10000; j++) {
p = A[j] * i + p;
A[j] = p % 10;
p = p / 10;
}
}
for (int i = 10000; A[i] == 0; i--)
tail = i-1;
for (int i = tail; i >=0; i--)
cout << A[i];
return 0;
}

Python

1
2
3
4
5
6
7
8
import os
import sys

n = int(input())
ans = 1
for i in range(1,n+1):
ans *= i
print(ans)

总结

C++版

  1. C++的思路是利用数组突破数据限制,创建了一个极大的数组,并初始化为0,每一位表示一位,利用p做中间变量进行进位。
  2. 输出的时候由于不确定数组多长,所以要从后向前找到第一个不为0的作为尾部。
  3. 然后从尾部循环输出结束

Python版

  1. Python能自动扩充数据长度,所以直接写个循环就行了
  2. 需要注意python的range最后结尾到n+1但不包括n+1