[NOIP1998 普及组] 阶乘之和
  gBkHYLY8jvYd 2023年11月05日 57 0

[NOIP1998 普及组] 阶乘之和

题目描述

用高精度计算出 [NOIP1998 普及组] 阶乘之和_i++[NOIP1998 普及组] 阶乘之和_数据_02)。

其中 ! 表示阶乘,定义为 [NOIP1998 普及组] 阶乘之和_数据_03。例如,[NOIP1998 普及组] 阶乘之和_i++_04

输入格式

一个正整数 [NOIP1998 普及组] 阶乘之和_数组_05

输出格式

一个正整数 [NOIP1998 普及组] 阶乘之和_i++_06,表示计算结果。

样例 #1

样例输入 #1

3

样例输出 #1

9

提示

【数据范围】

对于 [NOIP1998 普及组] 阶乘之和_i++_07 的数据,[NOIP1998 普及组] 阶乘之和_数据_08

【其他说明】

注,《深入浅出基础篇》中使用本题作为例题,但是其数据范围只有 [NOIP1998 普及组] 阶乘之和_i++_09,使用书中的代码无法通过本题。

如果希望通过本题,请继续学习第八章高精度的知识。

#include<bits/stdc++.h>//万能头文件
using namespace std;
int a[100000],n,i,y,xy[100000],s[100000];//s[0]和a[0]表示两个数组的长度
//s表示答案,a表示阶乘,先算出阶乘,放在a里,再把s和它相加,更新s
void add()//表示s=s+a
{
    int i;
    memset(xy,0,sizeof(xy));//xy为辅助数组,先将a+s放入xy,再将s更新为xy
    xy[0]=max(s[0],a[0]);//更长的为xy数组长度
    for (i=1;i<=xy[0];i++)
    {
        xy[i]+=s[i]+a[i];//将每一位相加
        xy[i+1]=xy[i]/10;//进位
        xy[i]%=10;//进位
     }
    while (xy[xy[0]+1]>0) //进位
        {
            xy[xy[0]+2]=xy[xy[0]+1]/10;
            xy[xy[0]+1]%=10;
            xy[0]++;
        }
    s[0]=xy[0];//长度也要更新
    for (i=1;i<=xy[0];i++) s[i]=xy[i];//将xy给s
}
int main()//愉快的开始了主程序
{
    cin>>n;
    a[0]=1;//将数组初值赋好
    a[1]=1;//这里一定要是1,不然算阶乘的时候一直为0
    s[0]=1;
    s[1]=0;
    for (y=1;y<=n;y++) //这里是高精度乘法
    {
        memset(xy,0,sizeof(xy));//xy为辅助数组,先将a+s放入xy,再将s更新为xy
        xy[0]=a[0];
        for (i=1;i<=a[0];i++)
        {
          xy[i]+=a[i]*y;//算阶乘
          xy[i+1]=xy[i]/10;//进位
          xy[i]%=10;
        }
        while (xy[xy[0]+1]>0)//进位 
        {
            xy[xy[0]+2]=xy[xy[0]+1]/10;
            xy[xy[0]+1]%=10;
            xy[0]++;
        }
        for (i=1;i<=xy[0];i++) a[i]=xy[i];//算出y!放入a内
        a[0]=xy[0];
        add();//进行高精度加法
    }
    for (i=s[0];i>=1;i--) cout<<s[i];//输出
    cout<<endl;//换行
    return 0;//愉快的结束了主程序
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  gBkHYLY8jvYd   2023年12月09日   29   0   0 cii++数据
  gBkHYLY8jvYd   2023年12月10日   22   0   0 #include数组i++
  gBkHYLY8jvYd   2023年12月08日   20   0   0 #includecii++
gBkHYLY8jvYd
作者其他文章 更多

2023-12-12

2023-12-11

2023-12-10

2023-12-10

2023-12-09

2023-12-08

2023-12-06

2023-12-06

2023-12-06