| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 390 人关注过本帖
标题:一个oj的题,求指教
只看楼主 收藏
花脸
Rank: 5Rank: 5
等 级:职业侠客
帖 子:604
专家分:373
注 册:2017-1-4
结帖率:95.65%
  已结贴   问题点数:20  回复次数:11   
一个oj的题,求指教
阶乘的0
时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
计算n!的十进制表示最后有多少个0
输入
第一行输入一个整数N表示测试数据的组数(1<=N<=100)
每组测试数据占一行,都只有一个整数M(0<=M<=10000000)
输出
输出M的阶乘的十进制表示中最后0的个数
比如5!=120则最后的0的个数为1
样例输入
6
3
60
100
1024
23456
8735373
样例输出
0
14
24
253
5861
2183837

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int m;
        cin>>m;
        int sum=0;
        long long temp=1;
        for(int i=1;i<=m;i++)
        {
            temp*=i;
        //    cout<<temp<<endl;
            if(temp%10==0)
            {
                temp/=10;
                sum++;
            }
        }
        cout<<sum<<endl;
    }
    return 0;
}
我用的是边算阶乘边判断末尾有没有零,感觉思路没错,但是结果不对。。。
2018-03-13 22:31
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:130
帖 子:1478
专家分:7470
注 册:2014-5-19
  得分:5 
long long型应该容不下你那么大的测试数据吧
2018-03-13 22:53
rjsp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:242
帖 子:5552
专家分:31395
注 册:2011-1-18
  得分:5 
程序代码:
#include <iostream>
using namespace std;

int main( void )
{
    unsigned n;
    cin >> n;

    while( n-- )
    {
        unsigned m;
        cin >> m;

        unsigned count = 0;
        for( ; m!=0; m/=5 )
            count += m/5;
        cout << count << '\n';
    }
}
2018-03-14 08:32
花脸
Rank: 5Rank: 5
等 级:职业侠客
帖 子:604
专家分:373
注 册:2017-1-4
  得分:0 
回复 3楼 rjsp
为什么这么写呢?
2018-03-14 12:36
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
  得分:5 
回复 4楼 花脸
这是个求因子的问题。实际就是招出1-n中一个有多少个5。
5,15,20这算是1个5。
25,50,75,100,算是2个5.
125,250算是3个5。
他的意思是先求5的倍数+25的倍数+125的倍数
25和125都在5的倍数里,所以都是上一层+1就行

[此贴子已经被作者于2018-3-14 15:08编辑过]

2018-03-14 15:03
花脸
Rank: 5Rank: 5
等 级:职业侠客
帖 子:604
专家分:373
注 册:2017-1-4
  得分:0 
回复 5楼 李晨经纪人
好的谢谢,
2018-03-14 23:05
九转星河
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:长长久久
等 级:版主
威 望:41
帖 子:4821
专家分:13635
注 册:2016-10-22
  得分:5 
10=2*5 100=2*2*5*5 1000=2*2*2*5*5*5 10000=2*2*2*2*5*5*5*5
严格来说不是算多少个5,而是多少对2*5
但由于在阶乘里面2的因子比5的总是要多,所以看有多少个5就可以了~

[code]/*~个性签名:弟弟的妹妹叫妹妹,弟弟的姐姐叫姐姐~ 2018-06-18更~*/[/code]
2018-03-15 10:30
花脸
Rank: 5Rank: 5
等 级:职业侠客
帖 子:604
专家分:373
注 册:2017-1-4
  得分:0 
回复 7楼 九转星河
因子2比因子5多?不应该一样多嘛。。
2018-03-15 13:03
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
  得分:0 
回复 8楼 花脸
只说1-5的话2的因子有2和4共3个 5只有1个
2018-03-15 13:16
九转星河
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:长长久久
等 级:版主
威 望:41
帖 子:4821
专家分:13635
注 册:2016-10-22
  得分:0 
以下是引用花脸在2018-3-15 13:03:49的发言:

因子2比因子5多?不应该一样多嘛。。

再严谨一点应该是n>=2的时候~

[code]/*~个性签名:弟弟的妹妹叫妹妹,弟弟的姐姐叫姐姐~ 2018-06-18更~*/[/code]
2018-03-15 13:36







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033860 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved