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

    题目描述

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

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

    输入输出格式

    输入格式:

     

    一个正整数N。

     

    输出格式:

     

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

     

    输入输出样例

    输入样例#1: 复制
    3
    
    输出样例#1: 复制
    9
    思路:高精度加法+高精度乘法。
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,ans[10000];
    struct nond{
        int num[10000];
    }v[51];
    void cheng(int pos,int num1[500]){
        for(int i=0;i<=num1[0];i++)
            v[pos].num[i]=num1[i];
        for(int i=1;i<=num1[0];i++)
            v[pos].num[i]*=pos;
        for(int i=1;i<=num1[0];i++)
            if(v[pos].num[i]>=10){
                if(i==num1[0])    num1[0]++;
                v[pos].num[i+1]+=v[pos].num[i]/10;
                v[pos].num[i]%=10;
            }
        for(;num1[0]>=1;num1[0]--)    if(v[pos].num[num1[0]]!=0)    break;
        v[pos].num[0]=num1[0];
    }
    void jia(int pos){
        ans[0]=max(ans[0],v[pos].num[0]);
        for(int i=1;i<=ans[0];i++)
            ans[i]+=v[pos].num[i];
        for(int i=1;i<=ans[0];i++)
            if(ans[i]>=10){
                if(i==ans[0])    ans[0]++;
                ans[i+1]+=1;
                ans[i]%=10;
            }
        for(;ans[0]>=1;ans[0]--)    if(ans[ans[0]]!=0)    break;
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)    v[i].num[0]=1,v[i].num[1]=1;
        for(int i=2;i<=n;i++)    cheng(i,v[i-1].num);
        for(int i=1;i<=n;i++)    jia(i);
        for(int i=ans[0];i>=1;i--)    cout<<ans[i]; 
    }
     
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    WindowsServer 2016激活
    selenium浏览器复用与原理分析
    react脚手架: 配置代理
    网络请求方式
    Java: Excel导入导出
    react 组件通信方式
    react: reactrouterdom
    react: 高阶函数及函数柯里化
    react: 事件处理
    react: 生命周期
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7895919.html
Copyright © 2011-2022 走看看