南阳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]; //补足五位数 } } }
??
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |