Just the Facts |
N | N! |
0 | 1 |
1 | 1 |
2 | 2 |
3 | 6 |
4 | 24 |
5 | 120 |
10 | 3628800 |
For this problem, you are to write a program that can compute the lastnon-zero digit of anyfactorial for (). For example, if your program is asked tocompute the last nonzerodigit of 5!, your program should produce ``2" because 5! = 120, and 2 is the last nonzero digit of 120.
1 2 26 125 3125 9999
1 -> 1 2 -> 2 26 -> 4 125 -> 8 3125 -> 2 9999 -> 8
题目大意:求出n的阶乘,然后从最后一位开始找,直到找到一个非零的数输出。
#include<stdio.h> int main() { int n,s,i; while(scanf("%d",&n)==1) { for(i=1,s=1;i<=n;i++) { s*=i;//求阶乘 while(s%10==0)//除去末尾的零 s/=10; s=s%100000; //一定要至少保留后五位非零位 //(五位以上要注意int型溢出,因此取五位最佳), //因为后五位非零位的进位(极限情况3125,即5^5) //会影响到最后的非零位 } printf("%5d -> %d\n",n,s%10); } return 0; }