首页 > 试题广场 >

2015!后面有几个0?

[单选题]
补楼上的解答 作者:王希 链接:http//www.zhihu.com/question/35321269/answer/62211752 来源:知乎
发表于 2015-12-14 11:09:30 回复(2)
解题技巧:https://blog.csdn.net/weixin_44268113/article/details/104203824
发表于 2020-02-09 12:14:37 回复(0)
1.每含一个5产生一个0,共有2015/5=403个,2.此外每含一个25将会和4结合产生两个0,相当于在5的基础上又额外产生一个0,总共会额外产生2015/25=80个,3.每含一个125会产生三个0,相当于再额外产生一个0,共有2015/125=16个,4.每含一个625会产生4个0,相当于再额外产生一个0,共有2015/625=3个。所以总共会产生403+80+16+3=502个0
发表于 2016-07-21 18:04:28 回复(6)
2015/5+2015/25+2015/125+2015/625=403+80+16+3=502
发表于 2015-11-04 22:28:03 回复(1)
1. 每一个10有一个0,1-2015***有2015/10=201个10
2. 每一个5和一个2有一个0,1-2015***有201+1=202个5
3. 注意:25*4会产生2个零,共有2015/25=80个25
               125*8会产生3个零,共有2015/125=16个125
                625*16会产生4个零,共有2015/625=3个625
总数=201+202+(80*2-80)+(16*3-16-16)+(3*4-3-3-3)=201+202+80+16+3=502。
划线的表示减去被覆盖的部分。比如,80个25产生的160个0中,包含有80个0是由5产生的。
 
发表于 2016-05-16 14:47:48 回复(3)
这题其实是分析在2015!能够分解出多少个因子5,简单记住就是除以5,除以5的平方。。。一直到除以5的n次方(小于等于输入)的结果之和,代码如下:
// Example program
#include <iostream>
#include <string>
using namespace std;

int main()
{
    int n = 0;
int result = 0;
cin>>n;
while(n>=5)
{
    n =(n-(n%5))/5;
    result+=n;
}
cout<<result<<endl;
return 0;
}

发表于 2016-09-21 16:09:40 回复(0)
有一个0就有一个10,即一组2 和 5. 很明显2会比5多得多。所以计算2015!中有多少5即可。
发表于 2016-04-17 13:26:53 回复(0)
#include <iostream>
using namespace std;

typedef long long LL;
LL res = 1;

int main()
{
    int d2 = 0;
    int d5 = 0;
    for (int i = 1; i <= 2015; ++i) {
        res = res * i;
        while (res % 2 == 0) ++d2, res /= 2;
        while (res % 5 == 0) ++d5, res /= 5;
        res = 1;
    }
    cout << min(d2, d5) << endl;
    return 0;
}

发表于 2021-05-15 09:05:28 回复(0)
单纯0对应的0 201个
单纯5对应的0 202个
25 75 对应的0(减去单纯5对应的)20*2  40个
50 100对应的0(减去单纯0对应的0) 20*2 40个
125的倍数对应的0(减去之前的)  16 个
625的倍数所对应的0(减去之前的) 3个
总共502个
发表于 2023-03-06 19:06:34 回复(0)