题目链接:http://poj.org/problem?id=1604
今天彪给我出了个小题,还是蛮有启发的。
这个题目如题就是简单的求n的阶乘的最后位非0数字,如果你还在想求出阶乘再算出最后一位,那么孩子你想太多了,n范围大些呢,题目中要求是n 小于 100000,这个已经彻底消灭了一个个试的心。
最开始的思路很简单,设一个循环变量从1-n,依次乘到累乘变量s中,只保留s的最后几位非零数字代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
#include <iostream> #include <iomanip> using namespace std; void main() { long int n,m=1,i; cin>>n; for(i=1;i<=n;i++) { m*=i; while(1) { if(m%10==0) m=m/10; else { m=m%10; break; } } } cout<<m; }
|
稍作修改后,查阅poj发现正是是1604 ,顺便修改以完成题目,。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <iostream> #include <iomanip> using namespace std; int main() { int n; while(cin>>n) { long int m=1,i; for(i=1;i<=n;i++) { m*=i; while(m%10==0) m=m/10; m=m%100000; } cout<<setw(5)<<n<<" -> "<<setw(1)<<m%10<<endl; } }
|