标题:求 n!的后面有多少个 0
只看楼主
香菱
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2014-4-4
结帖率:83.33%
已结贴  问题点数:10 回复次数:14 
求 n!的后面有多少个 0
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main()
 {int n,count=0,m;
 scanf("%d",&n);
 for(;n>4;n--)
 {m=n;
 while(m%5==0&&m>0)
 {
 m/=5;
 count++;
  }

}
printf("%d\n",count);
}    这是我编的程序,老是有个测试用例超时,但它又是保密项,不知道是输入的是啥?希望大神帮我看下我的程序哪还有问题?(不要用pow函数)谢谢了
搜索更多相关主题的帖子: include system count 保密 
2014-04-18 13:17
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:2 
程序代码:
#include<stdio.h>
int main()
{
    int s,t,sum=0;
    printf("请输入待测试数据:");
    scanf("%d",&t);
    s=5;
    while(s<=t)
    {
        sum+=t/s;
        s*=5;
    }
    printf("%d的阶乘末尾有连续%d个0.\n",t,sum);
    return 0;
}

DO IT YOURSELF !
2014-04-18 14:00
香菱
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2014-4-4
得分:0 
回复 2 楼 wp231957
谢谢了,但是我还想问一下,我的程序为何会超时,当输入什么数时会超时
2014-04-18 17:44
陌淡念
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2013-4-19
得分:0 
学习了。。。。
2014-04-18 17:49
香菱
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2014-4-4
得分:0 
回复 2 楼 wp231957
我把你的程序试了下,还是超时
2014-04-18 17:50
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
得分:8 
#include<stdio.h>
int main()
{
    int s,t,sum;
    printf("请输入待测试数据:");
    scanf("%d",&t);
    s=t;
    t=t/5;
    sum=t;
    while(t)
    {
        t=t/5;
        sum+=t;
    }
    printf("%d的阶乘末尾有连续%d个0.\n",s,sum);
    return 0;
}

[ 本帖最后由 ying8501 于 2014-4-18 19:25 编辑 ]
2014-04-18 18:34
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
得分:0 
#include<stdio.h>
int main()
{
    int s,t,sum=0;

    scanf("%d",&t);

    do{
        t=t/5;
        sum+=t;
    }while(t);

    printf("%d\n",sum);

    return 0;
}
2014-04-18 18:38
香菱
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2014-4-4
得分:0 
回复 6 楼 ying8501
你的程序用时好短哦,能给我讲讲它的算法吗?
2014-04-18 18:41
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
得分:0 
在网上可以查到相应的算法:
     一个数末尾0的个数,取决于它质因数分解中2和5的个数,因为只有2和5因子相乘才有可能得10,而一般来说2的个数比5的个数要多得多,所以只要考虑5的个数就可以了。根据数论中的定理:88!的质因数分解中5的指数为:[88/5]+[88/5^2]+[88/5^3]+...=17+3+0+0+...=20(注:[x]是高斯函数,其值为不超过x的最大整数)   上边程序时根据此规律做的。
2014-04-18 19:18
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
得分:0 
实际上,楼上版主也是用的这个算法,不过他没有注意到利用前项和后项的关系:t=t/5;
2014-04-18 20:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-430268-1-1.html




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

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