POJ 1604

来源:互联网 发布:在职医学类研究生知乎 编辑:程序博客网 时间:2024/05/21 06:19

点击打开链接


题意:求一个数 的阶乘然后找到最后一个不是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;}


原创粉丝点击