`
wsql
  • 浏览: 11714880 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Hdu 1042 N!解题报告

 
阅读更多

今天有点累了,贴个老程序大家看看。

13!已经超出long的表示范围,1000!怎么办?

用大整数乘以一个无符号数(10000以内),其中大整数以动态数组存放,每个元素存放一个5位的整数。如果每个元素存放一个1位的整数要超时的。另外输入10000半天出不来结果,估计题目里0 ≤ N ≤ 10000是吓吓人的。

#include<iostream>
#include
<algorithm>
#include
<vector>
usingnamespacestd;

constintMAX=100000;

voidprtBigv(vector<int>v)
...{
for(inti=0;i<v.size();i++)
...{
if(i==0)
printf(
"%d",v[i]);
else
printf(
"%05d",v[i]);
}


printf(
" ");
}


vector
<int>mul(vector<int>v,unsignedk)
...{
intc=0;
unsignedp;
vector
<int>res;

for(inti=v.size()-1;i>=0;i--)
...{
p
=v[i]*k+c;
res.push_back(p
%MAX);
c
=p/MAX;
}


if(c>0)res.push_back(c);

returnres;
}


boolrun()
...{
vector
<int>v;
unsignedn;

if(scanf("%u",&n)==EOF)returnfalse;

v.push_back(
1);

for(inti=2;i<=n;i++)
...{
v
=mul(v,i);
reverse(v.begin(),v.end());
}


prtBigv(v);

returntrue;
}


intmain()
...{
while(run());
return0;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics