| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5164 人关注过本帖
标题:n!阶乘后有几个零?
只看楼主 加入收藏
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
结帖率:94.44%
收藏
已结贴  问题点数:20 回复次数:15 
n!阶乘后有几个零?
程序代码:
#include<stdio.h>
long int fact(long int n);
int main()
{
    long int n,sum;
    while(scanf("%ld",&n)&&n)
    {
        sum=fact(n);
        printf("%ld\n",sum);
    }
    return 0;
}
long int fact(long int n)
{
    long int k,f=0;
    if(n<5) f=f+0;
    else 
    {
        k=n/5;
        f=k+fact(k);
    }
    return f;
}

我的思路是调用递归函数,将大数一次次地除以5;但是交上去就是WA,据说测试数据是要求输出30000多个零,可是我的程序能算到一亿的阶乘后面的零的个数,难道还不够吗?求高手解答!
搜索更多相关主题的帖子: color 
2011-12-08 16:46
战斗!立
Rank: 2
等 级:论坛游民
帖 子:29
专家分:43
注 册:2011-11-26
收藏
得分:0 
你可以尝试用BCD码来编写,样可以吧结果打出来,再大的数也能打出
2011-12-08 17:03
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
虽然写的有点丑,但貌似没错,请附题目地址
2011-12-08 17:14
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:5 
求地址
程序代码:
#include<stdio.h>
int main()
{
    int m,n,i;   
    scanf("%d",&m);
    while(m--)
    {
        scanf("%d",&n);
        i = 0;
        while(n)
        {
            i+=n/5;
            n/=5;
        }
        printf("%d\n",i);
    }
    return 0;
} 

                                         
===========深入<----------------->浅出============
2011-12-08 18:27
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:0 
谢谢三楼和四楼,是学校练习平台上的,我把题目copy过来吧!
Description

一天巴克闲着无聊就算起了阶乘,突然他想一个数的阶乘末尾到底有多少个零,于是笔算起来,但是阶乘实在太大了,巴克算着算着就晕掉了-_-|||,于是他把希望寄托在大家身上,帮帮巴克吧.(有糖吃的,,,,嘿嘿)

Sample Input

30
Sample Output

7
2011-12-08 18:57
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:0 
回复 2楼 战斗!立
我是电脑白痴,刚刚大一,进入编程,什么事BCD?
2011-12-08 18:59
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:0 
我的同学同样写了一个程序,测试了几个数据,发现在只有在输入999999的时候,出现错误,他的答案是239998,我的答案是249992,奇葩啊
2011-12-09 09:57
tianqiao
Rank: 2
等 级:论坛游民
帖 子:80
专家分:55
注 册:2011-9-21
收藏
得分:0 
这是我的代码,,输入999999的结果是239998;
#include<stdio.h>
int main()
{
    int a,count=0,sum;
    scanf("%d",&sum);
    for(a=5;a<=sum;a+=5){
        count++;
        if(!(a%25))count++;
    }
    printf("%d",count);
    count=0;
   
    return 0;
}
2011-12-09 12:00
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:15 
回复 7楼 傻瓜菜
正确答案是249992,这要弄清楚算法原理。n!末尾0的个数即是从1到n中含5的个数之和,0只能产生在素数2×5之积,算术基本定理懂不懂?不懂自己百度
程序代码:
#include "stdio.h"
void main()
{
    int n,i,sum=0;
    printf("请输入n:");
    scanf("%d",&n);
    while(n!=0)
    {
        n/=5;
        sum+=n;
    }
    printf("末尾为0的个数为%d\n",sum);
}

2011-12-09 12:45
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:0 
回复 8楼 tianqiao
上述代码仅限于sum<125的情形,原因自己想想
2011-12-09 12:48
快速回复:n!阶乘后有几个零?
数据加载中...
 
   



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

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