题目链接: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