zoukankan      html  css  js  c++  java
  • P1009 阶乘之和

    P1009 阶乘之和

    • 题目提供者洛谷OnlineJudge
    • 标签数论(数学相关)高精1998NOIp提高组NOIp普及组
    • 难度普及-
    • 通过/提交1139/3791

    提交该题 讨论 题解 记录

    题目描述

    用高精度计算出S=1!+2!+3!+…+n!(n≤50)

    其中“!”表示阶乘,例如:5!=5*4*3*2*1。

    输入输出格式

    输入格式:

    一个正整数N。

    输出格式:

    一个正整数S,表示计算结果。

    输入输出样例

    输入样例#1:
    3
    
    输出样例#1:
    9
    #include<iostream>
    #include<cstring>
    using namespace std;
    int a[100000],n,i,j,x[100000],y[100000];
    void add()//处理进位
    {
        memset(x,0,sizeof(x));
        x[0]=max(y[0],a[0]);
        for(i=1;i<=x[0];i++){x[i]+=y[i]+a[i],x[i+1]=x[i]/10,x[i]%=10;}
        while(x[x[0]+1]>0){x[x[0]+2]=x[x[0]+1]/10,x[x[0]+1]%=10,x[0]++;}
        y[0]=x[0];
        for(i=1;i<=x[0];i++){y[i]=x[i];}
    }
    int main()
    {
        cin>>n;
        a[0]=1,a[1]=1,y[0]=1,y[1]=0;
        for(j=1;j<=n;j++)
        {
            memset(x,0,sizeof(x));//清空阶乘数组
            x[0]=a[0];
            for(i=1;i<=a[0];i++){x[i]+=a[i]*j,x[i+1]=x[i]/10,x[i]%=10;}//模拟阶乘
            while(x[x[0]+1]>0){x[x[0]+2]=x[x[0]+1]/10,x[x[0]+1]%=10,x[0]++;}//加上阶乘
            for(i=1;i<=x[0];i++){a[i]=x[i];}
            a[0]=x[0];
            add();
        }
        for(i=y[0];i>=1;i--){cout<<y[i];}//倒序存储就要倒序输出
        return 0;
    }
  • 相关阅读:
    java-date和Calendar运用
    java-date类使用练习(1)
    java-正则表达式
    JAVA-String类的应用
    java-重写equals
    java-抽象类、接口等实际应用 (酒店小案例)
    fuzz系列之libfuzzer
    ZAB协议(转)
    Paxos(转自wiki)
    Zookeeper简介和安装使用
  • 原文地址:https://www.cnblogs.com/shenben/p/5638288.html
Copyright © 2011-2022 走看看