阶乘问题 C++
Problemdescription从输入文件中读取一个数n,求出n!中末尾0的个数。Input输入包含若干组数据。第一行上有一个整数m,指明接下来的数字的个数。然后是m...
Problem description 从输入文件中读取一个数n,求出n!中末尾0的个数。
Input 输入包含若干组数据。第一行上有一个整数m,指明接下来的数字的个数。然后是m行,每一行包含一个确定的正整数n,1£n£1000000000。
Output 对输入行中的每一个数据n,输出一行,其内容是n!中末尾0的个数。
Time Limit: 1000ms, Special Time Limit:2500ms, MemoryLimit:32768KB
所以不能用判断2和5的个数来比较,希望有详细点的中文注释,, 展开
Input 输入包含若干组数据。第一行上有一个整数m,指明接下来的数字的个数。然后是m行,每一行包含一个确定的正整数n,1£n£1000000000。
Output 对输入行中的每一个数据n,输出一行,其内容是n!中末尾0的个数。
Time Limit: 1000ms, Special Time Limit:2500ms, MemoryLimit:32768KB
所以不能用判断2和5的个数来比较,希望有详细点的中文注释,, 展开
3个回答
展开全部
首先 0 只能由 2 5 10 得到,所以就是算 2 5 正好组合的数量+10的数量,但是 2的数量肯定比5多,而且 10 可以 拆分出一个 5,其实只要算5有多少个就可以了,那么 5的个数怎么得到呢?
那么以 100的阶乘为例:
首先要知道:
1 2 3 4 5 6 7 …… 100
100 99 98 97 96 95 94 …… 1
从所有有 5 的里面取出 1个 5 : (1+(100-5))*(100/5)/2
从所有剩下的 5 里面取出 1个 5 : (1+(100-5*5))*(100/(5*5))/2
……
一直算到最后,那么总和就是答案
那么以 100的阶乘为例:
首先要知道:
1 2 3 4 5 6 7 …… 100
100 99 98 97 96 95 94 …… 1
从所有有 5 的里面取出 1个 5 : (1+(100-5))*(100/5)/2
从所有剩下的 5 里面取出 1个 5 : (1+(100-5*5))*(100/(5*5))/2
……
一直算到最后,那么总和就是答案
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询