博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
灵光一现,代码实现
阅读量:4957 次
发布时间:2019-06-12

本文共 549 字,大约阅读时间需要 1 分钟。

题目 

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

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

开始yy

看到题目是否一下子想到直接写两个高精模拟一遍,太naive了

用jiao想一想都知道时间肯定过不去的啊

这时候就要走一些旁门左道

观察式子,1!+2!+3!+4!……n!,n!=(n-1)!*n

然后把式子从左到右会发现可以Sn=((( n+1)*(n-1))*(n-2))*……*1

可以用for(i:n-1) ans=(ans+1)*i表示

现在再看耗时的差别,加法由高精加变为整数加法明显简单了不少

乘法由高精乘高精变为高精乘整数,循环次数也少了

#include
using namespace std;const int mod=1e8;int n,base=4,l=1;long long ans[10];void mult(){ for(int i=0;i

 这个膜1e8属于进制优化,简单的解释为数组的每一个单元存一个长度为8的子串

例如123456789在数组中的情况为a[0]=2345678,a[1]=1

转载于:https://www.cnblogs.com/z12315/p/9966312.html

你可能感兴趣的文章
MongoDB的简单使用
查看>>
hdfs 命令使用
查看>>
prometheus配置
查看>>
定宽320 缩放适配手机屏幕
查看>>
BZOJ 2120 数颜色 【带修改莫队】
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
Codeforces 40 E. Number Table
查看>>
CLR via C#(第3 版)
查看>>
java语法之final
查看>>
关于响应式布局
查看>>
详解ASP.Net 4中的aspnet_regsql.exe
查看>>
python 多进程和多线程的区别
查看>>
hdu1398
查看>>
[android] 网络断开的监听
查看>>
156.Binary Tree Upside Down
查看>>
MongoDB在windows下安装配置
查看>>
Upselling promotion stored procedure
查看>>
sigar
查看>>
iOS7自定义statusbar和navigationbar的若干问题
查看>>
程序员如何提高影响力:手把手教你塑造个人品牌
查看>>