toj2034 Just the Facts
2013-09-15 15:45
183 查看
题目链接:http://acm.tju.edu.cn/toj/showp2034.html
题目大意:输出阶乘最后一个不是0的数。
思路:此题考查点有两个:(一 )输出格式 setw(5) 右对齐;(二 )怎么样才能不超时,除了每次乘时就除去0之外,还应该每次只保留后5位,因为最大为10000,必须至少保留后5位;如果不作这步,会超时。 ps:setw(n)的头文件为 iomanip
代码:
//toj2034求阶乘的末尾最后一个不是0的数
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n,i;
long long sum;
while(cin>>n)
{
sum=1;
for(i=1;i<=n;i++)
{
sum=sum*i;
while(sum%10==0)
{ sum=sum/10;}
sum=sum%100000; //每次只保留后五位 这样可大大减小计算量 因为至多为10000 所以除以100000;
}
cout<<setw(5)<<n<<" -> "<<sum%10<<endl;
}
return 0;
}
也做过其他阶乘的题目 后面会陆续上传
ps:刚刚在网上看到有个哥们儿用DP做的 留着 http://blog.sina.com.cn/s/blog_6a84c1d30100lced.html
题目大意:输出阶乘最后一个不是0的数。
思路:此题考查点有两个:(一 )输出格式 setw(5) 右对齐;(二 )怎么样才能不超时,除了每次乘时就除去0之外,还应该每次只保留后5位,因为最大为10000,必须至少保留后5位;如果不作这步,会超时。 ps:setw(n)的头文件为 iomanip
代码:
//toj2034求阶乘的末尾最后一个不是0的数
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n,i;
long long sum;
while(cin>>n)
{
sum=1;
for(i=1;i<=n;i++)
{
sum=sum*i;
while(sum%10==0)
{ sum=sum/10;}
sum=sum%100000; //每次只保留后五位 这样可大大减小计算量 因为至多为10000 所以除以100000;
}
cout<<setw(5)<<n<<" -> "<<sum%10<<endl;
}
return 0;
}
也做过其他阶乘的题目 后面会陆续上传
ps:刚刚在网上看到有个哥们儿用DP做的 留着 http://blog.sina.com.cn/s/blog_6a84c1d30100lced.html
相关文章推荐
- TOJ 2034. Just the Facts
- UVA 568 - Just the Facts
- poj1604 Just the Facts
- UVA 568-Just the Facts
- Just the Facts
- Just the Facts uva
- UVA - 568 Just the Facts
- poj 1604 Just the Facts
- uva 568 Just the Facts
- uva568 - Just the Facts
- HUD 1066 Just the Facts(高精度)
- UVA568 Just the Facts
- 1199: Just the Facts
- UVA 568 - Just the Facts
- UVa 568 - Just the Facts
- UVa 568 - Just the Facts
- POj 1604 Just the Facts
- UVA - 568 Just the Facts
- Just the Facts(P1604)
- Just the Facts(高精度)