1×2×3×4×……×198×199末尾有几个0?要详解,写出算的过程和思路!

问题描述:

1×2×3×4×……×198×199末尾有几个0?
要详解,写出算的过程和思路!

编程解么-_-'C++
#include
using namespace std;
int main(){
int count(0),multiple(1);
for(int i =2;i if(multiple*i%10==0){
count++;
multiple /=10;
}
else{}
cout}//---好了-_-'

末尾有几个0关键看乘积中5的幂为几
5的倍数会产生1个5
25的倍数会产生2个5
125的倍数会产生3个5
1×2×3×4×……×198×199
在1到199中 5的倍数有39个
25的倍数有7个
125的倍数有1个
所以共计有39+7+1=47个
为什么这里是39+7+1 而不是39+7*2+1*3呢?? 是由于25的倍数在5的倍数中算过一次, 125的倍数在 25的倍数 和5的倍数中都算过一次。所以不要重复计数
最后答案47

100会提供两个0
10,20……190等共有18个0
每一个个位数1~9的循环又会提供1个0
共有20个0
每一个十位数1~9的循环又会提供1个0
共有2个0
共有40个0
-------------
可能有漏算的 不过基本分析方法是这样

5,15,25,35,45,。。。195,一共有42个5
10,20,30。。。。190 有19个10
所以有42+19=61个0
5,25,125,分别算做1,2,3个5,因为都是5的整次方数,2的个数肯定比5多,所以以5的个数为标准就可以了。

要判断1×2×3×4×……×198×199末尾有几个0
就要判断乘式子中有多少个十相乘,也就是说有多少个5*2或者10的倍数,由于5的倍数肯定少于2的倍数,也就是说在5*2这种情况中只要考虑5的倍数,也就是问1×2×3×4×……×198×199中有多少5的倍数
可见199/5=39.8
也就是有39个5的倍数
即有39个0
ok?

199/25+199/5 (用去尾法取整数)
≈7+39
=46个

“0”的产生只有在10的整数倍和5和偶数相乘的情况下产生.所以我们只要数数有多少末尾数是5和0的数字就可以了
1-199有20个末尾数是5即会产生20个0
1-199有19个末尾数0和一个100,即一共20个0
所以一共40个0

0”的产生只有在10的整数倍和5和偶数相乘的情况下产生。所以我们只要数数有多少末尾数是5和0的数字就可以了
1-199有20个末尾数是5即会产生20个0
1-199有19个末尾数0和一个100,即一共20个0
所以一共40个0