栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

小朋友学数学(23):求2000!末尾有多少个0

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

小朋友学数学(23):求2000!末尾有多少个0

一、思路

一个数末尾的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 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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/232326.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号