题解 P1134 【阶乘问题】

· · 题解

PS:在搜别的题时偶然看到此题,就做了一下下,还挺简单

第四篇题解(你没看错,我还蓝名呢(发布题解时))
此题只要你看懂题意,会写循环,就能做AC

先放一个我第一次写的代码(#1 AC,#2~6TLE(超时),#7MLE(爆空间))

#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<cstring>
#include<string>
#include<queue>
#include<iomanip>
#include<algorithm>
using namespace std;
long long a,b,c[50000001];
int main()
{
    cin>>a;
    c[0]=1;
    for(int i=1;i<=a;i++)
        c[i]=i*c[i-1];
    b=c[a];
    while(b%10==0)
        b=b/10;
    cout<<b%10;
    return 0;
}

TLEの根源在这儿

while(b%10==0)
    b/=10;

大数处理时间极长

大概……超过了30多秒
大吃一惊

MLE我还没找到为啥,欢迎留言
改了40多分钟,测试了一堆数据,改了又改,最终AC了(代码放送时间)

#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<cstring>
#include<string>
#include<queue>
#include<iomanip>
#include<algorithm>
using namespace std;
long long a,cxk=1;
int main()
{
    cin>>a;
    for(int i=1;i<=a;i++)
    {
        cxk*=i;
        while(cxk%10==0)
            cxk=cxk/10;
        cxk%=1000000;
    }
    cout<<cxk%10;
    return 0;
}

每次计算玩一定要取模!!!!!!!!

不然会TLE!!!!!!

拜拜!
cout<<"撤离,向安全区进发!";
cout<<"go back to save zone!";
cout<<"撤离,向信号接收区进发!";