计算1+2!+3!+...+n!的和

Code

点击查看代码
#include<iostream>
#include<vector>
using namespace std;
typedef vector<int> VI; //动态数组
int n;
VI add(VI &A, VI &B) //高精度加法
{
if (A.size() < B.size()) return add(B, A); //使A长度大于B VI C; //接收计算结果 int t=0; //保存进位 for (int i = 0; i < A.size(); i ++ ) //以长度长的作循环
{
t += A[i];
if (i < B.size()) t += B[i]; //如果B没有加完
C.push_back(t % 10); //结果mod 10
t /= 10; //进位
} if (t) C.push_back(t); //结果长度可能长于长度最长的数
return C; //返回结果
} VI mul(VI &A,int b){ //高精度与低精度乘法
VI C; //接收结果
int t = 0; //保存进位
for(int i = 0; i <= A.size()-1 || t;i++){ //如果没有乘完或者进位不为0
if(i <= A.size()-1)t += A[i] * b; //相乘
C.push_back(t % 10); //结果mod 10
t /= 10; //进位
}
while(C.size() > 1&&C.back() == 0)C.pop_back(); //除去前导0(可能高进度乘0)
return C; //返回结果
} int main(){
VI A; //每次保存阶乘
VI C; //保存阶乘之和
C.push_back(0); //初始化为0
cin >> n;
for(int i = 1; i <= n; i ++){
A.erase(A.begin(),A.end()); //每次用完要清空
A.push_back(1); //初始化为1再求阶乘
for(int j = i;j >= 1; j--){
A = mul(A,j); //求阶乘
}
C = add(C,A); //阶乘之和
}
for(int i = C.size() - 1; i >= 0; i -- )cout << C[i]; //逆序输出
return 0;
}

最新文章

  1. selenium之操作ChromeDriver
  2. zoj 1610
  3. dd 生成指定大小文件
  4. Android 使用意图传递数据
  5. 文件IO一些注意的地方
  6. SQL Server 2005的XML数据修改语言(XML DML)
  7. reviewboard搭建
  8. uva 215 hdu 1455 uvalive5522 poj 1011 sticks
  9. MySQL存储引擎:InnoDB和MyISAM的差别/优劣评价/评测/性能测试
  10. .net mvc的“从客户端中检测到有潜在危险的 Request.Form 值”问题解决
  11. FIVE1
  12. java.lang包【Object类】
  13. Scrapy框架的执行流程解析
  14. [转]Tor Browser在国内Windows平台下的超详细教程
  15. 在CentOS 6 的cron/crontab中使用wine运行exe程序
  16. java(4) 异常
  17. 文件上传 python
  18. 使用 Python 读取火狐的 cookies
  19. JVM-类加载过程(Java类的生命周期)
  20. [翻译] JHChainableAnimations

热门文章

  1. Teambition企业内部应用开发指南
  2. ES6 学习笔记(四)基本类型Number
  3. Git创建、diff代码、回退版本、撤回代码,学废了吗
  4. Java:String、StringBuilder、StringJoiner学习笔记
  5. 2022春每日一题:Day 25
  6. codeforces补题计划
  7. Kubernetes专栏 | 安装部署(一)
  8. day28 BOM浏览器对象 &amp; 定时事件与Cookie &amp; (视频卷子讲解)
  9. Windows及eclipse常用快捷键-小彤在努力
  10. js-day04-作业