阶乘问题,洛谷之提高历练地,数论(3-5)

正题

      第三题:阶乘问题

       这道题是水题。我们只要统计出2和5的数量取个最小值,再用一个tot记录其他积的最后一位。后面明显分类讨论一下就可以得出答案。

      发现,乘2的尾数是(2,4,8,6),而乘5的尾数是(5,0),明显。

代码

#include
#include
#include

int n;
int tot=1;
int t=0;
int mod2=0,mod5=0;

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		t=i;
		while(t%2==0) {t/=2;mod2++;}
		while(t%5==0) {t/=5;mod5++;}
		tot*=t%10;
		tot%=10;
	}
	if(mod2>mod5) {mod2-=mod5;mod5=0;}
	else {mod5-=mod2;mod2=0;}
	if(mod5>0)
		tot*=5;
	if(mod2>0)
	{
		if(mod2%4==1) tot*=2;
		if(mod2%4==2) tot*=4;
		if(mod2%4==3) tot*=8;
		if(mod2%4==0) tot*=6;
	}
	printf("%d",tot%10);
}


 

你可能感兴趣的:(阶乘问题,洛谷之提高历练地,数论(3-5))