lanqiaoOJ 1515 阶乘计算

题目描述

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

输入描述

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

输出描述

输出 n!n! 。

输入输出样例

示例

输入

10

输出

3628800

运行限制

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

解析:

  1. 整体算法背景
    • 当计算一个数的阶乘结果时,如果将阶乘结果以数组形式存储(例如用于处理非常大的阶乘结果,因为普通数据类型可能无法存储),这里的操作通常是对数组中每个数位进行处理的一部分。
  2. 关于在阶乘计算中的作用
    • 在计算阶乘时,假设我们要计算n!,并且将结果以数组形式存储(每个数组元素存储结果的一位数字)。
    • 通常会有一个外层循环来处理从到的数相乘过程。当计算n*(n-1)*……*1时,这个i可能代表正在相乘的其中一个数。
    • 例如,当计算5!(5*4*3*2*1)时,在某一时刻:
      • 对于数组存储结果的数位,a[j]表示结果中的某一位数字。最初可能从最低位开始计算。
      • i可能是正在与之前的部分结果相乘的数。比如在计算5*4*3的过程中,当处理到5*4=20之后,再乘以3时,i=3。此时存储着之前计算结果(20的某一位数字),a[j]*i就是将之前的部分结果的这一位数字乘以当前要乘的数i,再加上之前计算产生的进位carry,得到新的这一位数字(可能还需要后续处理进位)。

所以,在阶乘计算的这个代码片段中,i通常代表正在参与乘法运算的其中一个数,用于逐步构建阶乘结果的每一位数字。

#include <bits/stdc++.h>
using namespace std;
#define N 10010
int a[N]={0};
int main()
{
  // 请在此输入您的代码
  int n;
  cin>>n;
  a[0]=1;
  for (int i=1;i<=n;i++)
  {
    int carry=0;
    for(int j=0;j<N;j++)
    {
      a[j]=a[j]*i+carry;
      carry=a[j]/10;
      a[j]%=10;
    }
  }
  int last;
  for (int i=N-1;i>=0;i--)
  {
    if(a[i]!=0)
    {
      last=i;
      break;
    }
  }
  for (int i=last;i>=0;i--)
  {
    cout<<a[i];
  }
  return 0;
}

原题链接: 1.阶乘计算 - 蓝桥云课 (lanqiao.cn)icon-default.png?t=O83Ahttps://www.lanqiao.cn/problems/1515/learning/?page=1&first_category_id=1&problem_id=1515

蓝桥 lanqiaoOJ 1515通过 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值