• 洛谷 P1009 阶乘之和 Label:高精度


    题目描述

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

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

    输入输出格式

    输入格式:

    一个正整数N。

    输出格式:

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

    输入输出样例

    输入样例#1:

    3

    输出样例#1:

    9

    代码

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int n,sum[256],a[256];
     7 
     8 void plus_(){
     9     int i=0,k=max(sum[0],a[0]);
    10 //    cout<<k<<endl;
    11     for(int i=1;i<=k;i++){
    12         sum[i+1]+=(sum[i]+a[i])/10;
    13         sum[i]=(sum[i]+a[i])%10;
    14     }
    15     if(sum[k+1]>0) sum[0]=k+1;
    16     else sum[0]=k;
    17 }
    18 
    19 void multiply(int key){
    20     int i=0,k=a[0];//此处没有考虑k<=0的情况
    21     for(i=1;i<=k;i++) a[i]*=key;
    22     
    23     
    24     for(i=1;i<=k;i++){
    25         a[i+1]+=a[i]/10;
    26         a[i]%=10;
    27     }
    28     while(a[i]>0){
    29         a[i+1]=a[i]/10;
    30         a[i]%=10;
    31 //        cout<<a[i]<<" ";
    32         i++;
    33         a[0]++;
    34     }
    35 }
    36 
    37 int main(){
    38 //    freopen("01.txt","r",stdin);
    39     scanf("%d",&n);
    40     a[0]=a[1]=1;sum[0]=1;
    41     for(int i=1;i<=n;i++){
    42         multiply(i);
    43         plus_();
    44     }
    45 /*    for(int i=a[0];i>=1;i--)
    46 **        printf("%d",a[i]);
    47 **    puts("");
    48 */
    49     for(int i=sum[0];i>=1;i--)
    50         printf("%d",sum[i]);
    51     puts("");
    52     return 0;
    53 }

    高精度,因为是阶乘,所以a[1]=1,a[0]=1

    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 相关阅读:
    Python开发【第六篇】循环语句
    Python开发【第四篇】语句与函数
    Python开发【第三篇】数据类型
    Python开发【第二篇】:初始Python
    2019-10-11入博客第一篇文章
    vim学习2-文档编辑
    vim学习1-入门指令
    linux学习9-进程管理知识
    linux学习8-正则表达式基础
    linux学习7-数据流重定向
  • 原文地址:https://www.cnblogs.com/radiumlrb/p/5804331.html
Copyright © 2020-2023  润新知