前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小朋友学数学(23):求2000!末尾有多少个0

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

作者头像
海天一树
发布2019-03-06 13:16:29
7340
发布2019-03-06 13:16:29
举报
文章被收录于专栏:海天一树

一、思路

一个数末尾的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型变量存放不下,只能考虑用数组实现。但是数组实现会比较烦琐。若结合上面的数学思路,可以直接写出代码:

代码语言:javascript
复制
#include <iostream>
using namespace std;
int main(){
    cout << 499 << endl;
    return 0;
}

(二)用Python实现

在Python中,有一种bignum的数据类型,可以存放很大的数。当数很大时,将自动使用bignum类型。

代码语言:javascript
复制
product = 1
count = 0
for 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:
            break
print(count)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信息学竞赛NOIP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、思路
  • 二、编程实现
    • (一)用C++实现
      • (二)用Python实现
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档