码迷,mamicode.com
首页 > 其他好文 > 详细

100!的尾数有多少个零?100的阶层真的算不出来吗?

时间:2015-05-04 20:13:57      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:次循环   计数器   for循环   阶层   

今天看到一个蛮有意思的题,是问“100!”的尾数有多少个零。

尾数有多少个零,实际上指的是从这个数的最后一个不为0的数的下一个(也就是0)开始计数,一直到最后一个数(这些数自然都是0)有多少个0。

好吧,也就是说13330330000的尾数有4个零……

一个整数若含有因子5,则必然在求解100!时产生一个0,也就是说我们从5开始for循环,每次循环都给加上5,然后计数器加1。同时如果该整数还能被25整除,计数器还应该再加上1。

因此代码如下:

#include<stdio.h>

int main()
{
    int a,count =0;
    for(a=5;a<=66;a+=5)
    {
        ++count;
        if(!(a%25))
            ++count;
    }
    printf("100!的尾数有%d个零。\n",count);
    return 0;
}

题目后面进一步问了如何求出任意N!的尾数有多少个零。

#include<stdio.h>

int main()
{
    int n;
    printf("请输入N:\n");
    scanf("%d",&n);
    if(n<0)
        printf("%d的阶层无意义。\n",n);
    else if(n<=4)
        printf("%d的阶层的尾数没有零。\n");
    else
    {
        int a,count =0;
        for(a=5;a<=n;a+=5)
        {
            ++count;
            if(!(a%25))
                ++count;
        }
        printf("100!的尾数有%d个零。\n",count);
    }
    return 0;
}

本文就这样结束了吗?

题目的解答中有这么一段话:先求出100!的值,然后数一下末尾有多少个零。事实上,由于计算机所能表示的整数范围有限,这是不可能的。

首先,什么叫计算机所能表示的整数范围?应该叫int等数据类型的整数范围有限才对,计算机嘛……撑死了只能说不能存储而非不能表示。

另外100的阶层真的求不出来吗?请往下读。

我的博客中有大量关于Lisp,或者说Scheme的博文,使用这个语言,几行代码就能搞定了不是吗?欢迎阅读我的其他博文……

(define (fact n)
  (if (= n 1)
      1
      (* n (fact (- n 1)))))
;Value: fact

1000的阶层也能求,截图为证……

技术分享

闲得无聊,以下是10000的阶层,大家可以继续算更大的数,哈哈……

………………

我发现这个CSDN博客写上这么多数字之后博客没法提交,有异常……没办法,只能上传了……下载后觉得有意思记得回来点赞哦……

传送门:10000的阶层

100!的尾数有多少个零?100的阶层真的算不出来吗?

标签:次循环   计数器   for循环   阶层   

原文地址:http://blog.csdn.net/nomasp/article/details/45484979

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!