一、思路
一个数末尾的0是由2和5乘出来的,而1到2000里2多得是,主要看1到2000中有多少个5或5的n次方的倍数。
(1)统计5的倍数
2000/5=400,比如5、10、15、20、25等等。这些数,要么直接含了0,要么与2的倍数相乘会得到0,所以共有400个0。
(2)统计25的倍数
2000/25=80,比如25、50、75等等,这些数与4或4的倍数相乘,会得到两个0,但因为上一步中经加过一次0了,所以这里只能加80个0,而不是80 * 2 = 160个0。
(3)统计125的倍数:
2000/125=16,比如125、250、375等等,这些数与8或8的倍数相乘,会得到3个0。但是因为前两步算过两次了,这里只能再加一次。所以会增加16个0,而不是16 * 3 = 48个0。
(4)统计625的倍数
2000/625=3。这三个数分别数是625,1250和1875。这些数与16或16的倍数相乘,会得到4个0。但是前面已经计算过3次了,所以只会增加3个0,而不是3 * 4 = 12个 0。
(5)最后结果:400+80+16+3 = 499
二、编程实现
(一)用C++实现
考虑到2000!的阶乘是个很大的数,C++中的long long型变量存放不下,只能考虑用数组实现。但是数组实现会比较烦琐。若结合上面的数学思路,可以直接写出代码:
#include <iostream>using namespace std;int main(){ cout << 499 << endl; return 0; }
(二)用Python实现
在Python中,有一种bignum的数据类型,可以存放很大的数。当数很大时,将自动使用bignum类型。
product = 1 count = 0for i in range(1, 2001): product *= i strPro = str(product)for i in range(len(strPro) - 1, 0, -1): if '0' == strPro[i]: count += 1 else: breakprint(count)
作者:海天一树X
链接:https://www.jianshu.com/p/aa109b730b5e
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦