末尾多余的0由2*5构成。
此题可以优化,因为2的个数一定是大于5的个数(由n!计算质因数个数公式)
做法:对于每一个n,除去所有的因数2和5之后得到C,让所有的C不断累乘
取min(2,5)将多余的末尾0略去,剩下的2和5累乘进res,同时对res取模10得到结果。
#include<iostream>
#include<cstring>
using namespace std;
int n;
int main()
{
cin>>n;
int res=1,d2=0,d5=0;
for(int i=1;i<=n;i++)
{
int x=i;
while(x%2==0) d2++,x/=2;
while(x%5==0) d5++,x/=5;
res=res*x%10;
}
int k=min(d2,d5);
for(int i=0;i<d2-k;i++) res=res*2 %10;
for(int i=0;i<d5-k;i++) res=res*5 %10;
cout<<res;
}
你言简意赅,看你短短几句话看懂了。全面那么多点赞高的全没看懂,又是文字又是图片,花里胡哨,关键之处没有点明(起码我看不懂)。没想到你的题解排名不高质量却高,谢谢你,我看懂了。