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
    

    简单的大数相加和大数相乘。

    AC代码:

     1 #include<iostream>
     2 #include<sstream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<iomanip>
     6 #include<vector>
     7 #include<cmath>
     8 #include<stack>
     9 using namespace std;
    10 string lan_add(string a,string b)//large number addition
    11 {
    12     int la=a.length(),lb=b.length();
    13     //将字符串中字符转化为数字并倒序存储 
    14     int l=max(la,lb)+1,num1[l],num2[l];
    15     memset(num1,0,sizeof(num1));
    16     memset(num2,0,sizeof(num2));
    17     for(int i=0;i<la;i++) num1[i]=a[la-i-1]-'0';
    18     for(int i=0;i<lb;i++) num2[i]=b[lb-i-1]-'0';
    19     //la长度的数与lb长度的数之和长度不会超过max(la+lb)+1 ,模拟加法
    20     int c[l]={0};
    21     for(int i=0;i<l;i++)   c[i]=num1[i]+num2[i];
    22     //处理进位
    23     int carry=0;
    24     for(int i=0;i<l;i++)
    25     {
    26         c[i]+=carry;
    27         carry=c[i]/10;
    28         c[i]%=10;
    29     }    
    30 
    31     string ans;
    32     for(int i=l-1;i>=0;i--)  ans+=c[i]+'0';
    33         while(ans[0]=='0') {ans=ans.substr(1);}//去掉前导0  
    34     return ans;
    35 }
    36 string lan_mul(string a,string b)//large number multiplication
    37 {
    38     int la=a.length(),lb=b.length();
    39     //将字符串中字符转化为数字并倒序存储 
    40     int num1[la],num2[lb];
    41     for(int i=0;i<la;i++) num1[i]=a[la-i-1]-'0';
    42     for(int i=0;i<lb;i++) num2[i]=b[lb-i-1]-'0';
    43     //la长度的数和lb长度的数乘积长度不会超过la+lb ,模拟乘法 
    44     int c[la+lb]={0};
    45     for(int i=0;i<la;i++)
    46     for(int j=0;j<lb;j++)
    47     c[i+j]+=num1[i]*num2[j];
    48     //处理进位
    49     int carry=0;
    50     for(int i=0;i<la+lb;i++)
    51     {
    52         c[i]+=carry;
    53         carry=c[i]/10;
    54         c[i]%=10;
    55     }    
    56     
    57     string ans;
    58     for(int i=la+lb-1;i>=0;i--)
    59     ans+=c[i]+'0';
    60     while(ans[0]=='0') {ans=ans.substr(1);}//去掉前导0  
    61     return ans;
    62 }
    63 string to_str(int n)//将整数转化为字符串 
    64 {
    65     string ans;
    66     stringstream ss;
    67     ss<<n;
    68     ss>>ans;
    69     return ans;
    70 }
    71 int main()
    72 {
    73     int N;cin>>N;
    74     string result="0",temp="1";
    75         for(int i=1;i<=N;i++)
    76         {
    77         temp=lan_mul(temp,to_str(i));
    78         result=lan_add(result,temp);
    79     }
    80     cout<<result;
    81 }
    View Code
  • 相关阅读:
    float、定位、inline-block、兼容性需注意的特性总结
    meta 标签 详细说明
    兼容探讨一
    javascript性能优化总结二(转载)
    javascript性能优化总结一(转载人家)
    特效合集(原生JS代码)适合初学者
    svg实现简单沙漏旋转
    SVG制作简单的图形
    SVG的简单介绍
    jQuery之效果
  • 原文地址:https://www.cnblogs.com/wangzhebufangqi/p/12796171.html
Copyright © 2011-2022 走看看