zoukankan      html  css  js  c++  java
  • 【高精度】阶乘和

    问题 I: 【高精度】阶乘和

    时间限制: 1 Sec  内存限制: 64 MB
    提交: 4  解决: 4
    [提交] [状态] [讨论版] [命题人:外部导入]

    题目描述

    已知正整数N(N≤200),设S=1!+2!+3!+…N!,其中“!”表示阶乘,即N!=1×2×3×…×(N-l)×N,如:3 1=1×2×3…6。请编程实现:输入正整数N,计算结果S的值。

    输入

    一个正整数N(N≤200)。

    输出

    阶乘和。

    样例输入

    4
    

    样例输出

    33
    
    高精度加法与高精度阶乘结合
     1 #include <iostream>
     2 #include<string>
     3 #include<algorithm>
     4 #include<cstring>
     5 using namespace std;
     6 int nn,a[100005],b[100005];
     7 string fun_plus(string s,string t)
     8 {
     9     string res;
    10     int len_s=s.size(),len_t=t.size();
    11     int len=max(len_s,len_t);
    12     memset(a,0,sizeof(a));
    13     memset(b,0,sizeof(b));
    14     for(int i=len_s-1;i>=0;i--) a[len_s-i-1]=s[i]-'0';
    15     for(int i=len_t-1;i>=0;i--) b[len_t-i-1]=t[i]-'0';
    16     for(int i=0;i<len;i++)
    17     {
    18         a[i]+=b[i];
    19         a[i+1]+=a[i]/10;
    20         a[i]%=10;
    21     }
    22     while(a[len]==0)    len--;
    23     for(int i=len;i>=0;i--)   res+=a[i]+'0';
    24     return res;
    25 }
    26 string fun_multi(int n)
    27 {
    28     string res;
    29     if(n==0)    return "1";
    30     memset(a,0,sizeof(a));
    31     int cnt=0,m=n;
    32     while(m)    a[cnt++]=m%10,m/=10;
    33     for(int i=n-1;i>=2;i--)
    34     {
    35         int w=0;
    36         for(int j=0;j<cnt;j++)
    37         {
    38             a[j]=a[j]*i+w;
    39             w=a[j]/10;//此处顺序不能改变
    40             a[j]%=10;
    41         }
    42         while(w)
    43         {
    44             a[cnt++]=w%10;
    45             w/=10;
    46         }
    47     }
    48     while(!a[cnt])  cnt--;
    49     for(int i=cnt;i>=0;i--)
    50         res+=a[i]+'0';
    51     return res;
    52 }
    53 int main()
    54 {
    55     cin>>nn;
    56     string ans,temp;
    57     for(int i=1;i<=nn;i++)
    58     {
    59         temp=fun_multi(i);
    60         ans=fun_plus(temp,ans);
    61     }
    62     cout<<ans<<endl;
    63     return 0;
    64 }
    View Code
    如有错误,请指正,感谢!
  • 相关阅读:
    如何获得浏览器localStorage的剩余容量
    按Enter键后Form表单自动提交的问题
    IE10 11的css hack
    text-transform设置单词首字母大写
    Jade模板引擎(一)之Attributes
    sql server之ROW_NUMBER() OVER()取每组的第N行数据
    CSS3之让背景图片全部显示
    摆脱npm的网络问题: 淘宝npm镜像
    MaskedTextBox的聚焦和光标位置
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/scott527407973/p/9319810.html
Copyright © 2011-2022 走看看