南阳oj 大数阶乘 题目28
发布时间:2020-12-14 02:21:04 所属栏目:大数据 来源:网络整理
导读:?? 啊啊啊啊啊啊啊啊啊学的太少了 h2大数阶乘/h2div class="problem-ins" 时间限制:span class="editable highlight" id="problem[time_limit]"3000/span ms ?|? 内存限制:span class="editable highlight" id="problem[memory_limit]"65535/span KB /divd
|
??
啊啊啊啊啊啊啊啊啊学的太少了 <h2>大数阶乘</h2><div class="problem-ins"> 时间限制:<span class="editable highlight" id="problem[time_limit]">3000</span> ms ?|? 内存限制:<span class="editable highlight" id="problem[memory_limit]">65535</span> KB </div><div class="problem-ins">难度:<span class="editable highlight">3</span></div><div class="clr"></div><dl class="problem-display"><dt>描述 </dt><dd>我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?</dd><div class="clr"></div><dl class="others"><dt>输入</dt><dd>输入一个整数m(0<m<=5000)</dd><dt>输出</dt><dd>输出m的阶乘,并在输出结束之后输入一个换行符</dd><dt>样例输入</dt><dd><pre id="sample_input">50 30414093201713378043612608166064768844377641568960512000000000000 #include<iostream>
#include<iomanip>
using namespace std;
//存储20000以内的阶乘
int a[15470]; //用数组来存储结果,每个元素存一个五位数
int main()
{
int n;
cin>>n;
a[1]=1;
a[0]=1; //这个a[0]是个计数器,记录五位数的个数
int up; //向前一个五位数的进位
for(int i=2;i<=n;++i) //从2到n的乘数
{
up=0; //乘完每个乘数进位归零
for(int j=1;j<=a[0];++j) //已有数值位参与运算
{
a[j] *=i; //每一个五位数乘以乘数
a[j] +=up; //加上进位
up=a[j]/100000; //计算下一个进位
a[j] %=100000; //当前五位数的值
}
if(up!=0)
{
a[0]++; //若有进位,计数器加一
a[a[0]]=up; //存放进位
}
}
if(a[0]==1) cout<<a[1];
else
{
cout<<a[a[0]];
for (int i=a[0]-1;i>0;i--)
{
cout<<setfill('0')<<setw(5)<<a[i]; //补足五位数
}
}
}
??
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
