题意:求一个数 的阶乘然后找到最后一个不是0的数,例如120 ,则最后一个不是0即为2
如果按照以前的方法求N!,这题肯定超时,因为只要一个数所以我们只要用到后面的5位数就可以,(5位数和最大10000相乘才不会超过int 范围)
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; int s[10005]; int n; void multiply() { int i , j; memset(s,0,sizeof(s)); s[1] = 1; j = 1; for(i = 2;i <= 10000; i++) { j *= i; while(j%10 == 0)//去掉后面的0 j /= 10; j %= 100000;//j只要取后面5位数即可(6位会溢出) s[i] = j%10;//在求出第一个非0元素保存到数组中 } } int main() { multiply(); while(cin>>n) { //注意输出格式 printf("%5d",n); cout<<" -> "<<s[n]<<endl; } return 0; }