这题是一道求n!最右边的非零数字是多少
所以,有两种做法
算法1
暴力枚举
C++ 代码
#include <bits/stdc++.h>
using namespace std;
int a[40000]={1},lan=1;
void jiecheng(int i)
{
int b=0,t;
for(int k=0;k<lan;k++)
{
t=a[k]*i+b;
b=t/10;
a[k]=t%10;
}
while(b>0)
{
a[lan++]+=b%10;
b/=10;
}
}
int main()
{
int n;
cin>>n;
for(int i=2;i<=n;i++)
jiecheng(i);
while(a[lan]==0)
lan--;
for(int i=0;;i++)
if(a[i])
{
cout<<a[i]<<endl;
return 0;
}
}
算法2
递推求余法
C++ 代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,x=1;
cin>>n;
for(int i=1;i<=n;i++)
{
x*=i;
while(x%10==0)x/=10;
x%=1000;
}
cout<<x%10<<endl;
}