【题解】洛谷P1134[USACO Training Section 3.2]阶乘问题 数学知识

题目链接

题目描述

也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如:

12 ! = 1 × 2 × 3 × 4 × 5 × 6 × 7 × 8 × 9 × 10 × 11 × 12 = 479 , 001 , 600 12!= 1 \times 2 \times 3 \times 4 \times 5 \times 6 \times 7 \times 8 \times 9 \times 10 \times 11 \times 12 = 479,001,600
12 12 的阶乘最右边的非零位为 6 6

写一个程序,计算 N ( 1 N 50 , 000 , 000 ) N(1 \le N \le 50,000,000) 阶乘的最右边的非零位的值。

注意: 10 , 000 , 000 ! 10,000,000! 2499999 2499999 个零。

输入输出格式

输入格式:

仅一行包含一个正整数 N N

输出格式:

一个整数,表示最右边的非零位的值。

输入输出样例

输入样例#1:

12

输出样例#1:

6


乍一看这题就乱搞啊,这个数前面的位肯定是没有用的。但是!这个数的位数还不能保留少了(最开始我就保留了末尾一位,贼抠)

#include<cstdio>
typedef long long ll;
int n;
int main()
{
	scanf("%d",&n);ll ans=1;
	for(int i=1;i<=n;i++)
	{
		ans*=i;
		while(ans%10==0)ans/=10;
		ans%=1000000;
	}
	printf("%lld\n",ans%10);
	return 0;
}

总结

我是个节俭的人

猜你喜欢

转载自blog.csdn.net/qq_41958841/article/details/82799498