蓝桥杯练习BASIC-30 阶乘计算
发布日期:2021-05-14 23:51:01 浏览次数:42 分类:精选文章

本文共 996 字,大约阅读时间需要 3 分钟。

在这里插入图片描述

标签:数组,高精度

#include
#include
#include
using namespace std;#define N 10005vector
factorial[N];void fac(int n) { //核心代码 int len = factorial[n - 1].size();//上一个阶乘数的长度 for (int i = 0; i < len; i++) { //将上一个数的每一位都与当前位相乘,大数乘法 factorial[n].push_back(n * factorial[n-1][i]);//存入当前层数组里 } int carry = 0,i = len-1;//carry进位,i从后往前遍历 while (carry != 0||i >= 0) { if (i >= 0)//计算每一位加上进位后的余10数,就是当前位的值,除10得当前位进位 { int s = factorial[n][i] + carry; carry = s / 10; factorial[n][i] = s % 10; i--; } else { //如果遍历到数组开头,对开头剩下的数直接进行进位存储 factorial[n].insert(factorial[n].begin(), carry % 10); carry /= 10; } }}void make_table() { //制表,将每个阶乘放在一个数组里 factorial[0].push_back(1);//存入0的阶乘1 factorial[1].push_back(1);//存入1的阶乘1 for (int i = 2; i < 1001; i++) { //从2开始计算 fac(i); }}int main() { make_table(); int n; while (cin >> n) { for (int i = 0; i < factorial[n].size(); i++) { cout << factorial[n][i]; } cout << endl; } return 0;}```
上一篇:蓝桥杯练习BASIC-17 矩阵乘法
下一篇:LeetCode51/52 N皇后I/II

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月28日 19时37分02秒