首页 > 试题广场 >

数字(100!)后面有____个0。

[单选题]
数字(100!)后面有____个0。
  • 18
  • 20
  • 24
  • 28
  • 30
  • 100
推荐
在leetcode上遇到,主要是发现结合数字发现0的来源
10,100 ,分解到最后一定有2 * 5的形式,有一对代表一个0,由于一个数分解时质因数5是很少的,所以忽略2的寻找,主要寻找1---100!中每个数中质因数5的累积和。
5的倍数,25 = 5 * 5,125 = 5 * 5 * 5,这种情形要考虑到
25的倍数,只要符合条件的再进行累加
100 / 5 = 20;  100 / 25 = 4; 100 / 125 = 0;
20 + 4 = 24;
答案为 24  选C
编辑于 2015-06-19 17:06:35 回复(1)
末尾有多少0看的就是乘积中有多少个10,由于间隔就为偶数,所以直接看为5的倍数有多少个,分别为
5,10,15,20,25(2个),30,35,40,45,50(2个),55,60,65,70,75(2个),80,85,90,95,100(2个),所以共24个
发表于 2015-06-16 17:23:19 回复(0)
答案是C
中心思想其实不复杂,就是1到100里面每一个数,如果它的因数是5,那么末尾就多一个0
因为如果是5无论如何它都会被乘以2或4或6或8变成0
比如 5 算一个
25 为 5*5 算 2个//可以通俗看出 25的倍数都是2个
然后这样算下去,也可以写代码求出来
最后是 算 5 10 15 20 25 30 35 40 45 50 55......
个数是   1 1  1 1  2 1  1 1  1 2  1
最后加起来是 24个,也经过程序验证,毫无疑问,记得有一年google的题目就是求1024!尾数为0的个数,原理一样。



当然 如果你还不理解 最最最通俗就是 1到100有20个5,其中有4个是25.。。
所以 20+4=24 so easy.
编辑于 2015-06-16 14:14:54 回复(0)
24 看5和5的幂
发表于 2015-06-17 09:51:43 回复(0)
选C
乘积末尾是0,则有以下情况:
1.数字本身有0;
2.质因数中含有2和5的个数(1-100中由于质因数2的个数远多于5的个数,故其实只考虑质因数包含5的数字个数);
3.质因数中包含多个5的情况。
综上所述:
1.首先可以很容易的获得1-100中末尾包含的0的个数共11个(其中100有2个0);
2.末尾不为0且质因数包含5的数字个数共10个,包括5、15、25...95;
3.由于25、50、75(100由于两个0都贡献出来相当于1)都含有两个5,所以这部分的个数为3。
所以100!末尾0的个数为11+10+3=24个
发表于 2015-06-16 11:11:22 回复(0)
我比较笨,我是这样理解的,尾巴的0都是由10累积出来的,而10只能分解成2和5。换言之,2和5配对出10出来,从而对尾巴的0有贡献。而100!因式分解能提供充足的2,所以瓶颈就在于5。所以要看有多少个5。贡献两个5的数有25,50,75,100,加上20个只能提供一个5的数。20+4=24
发表于 2015-07-09 22:23:24 回复(0)
就是一共有多少个10,10可以分解成2*5,那么就是看一共有多少对(2,5)
每一个偶数都有2,有50个2,然后有的偶数还有多个2:
4-2,8-3,12-2,16-4,20-2,24-3,28-2,32-5,36-2,40-3,44-2,48-4,52-2,56-3,60-2,64-6,68-2,72-3,76-2,80-4,84-2,88-3,92-2,96-5,100-2,那么一共有2+3+2+4+2+3+2+5+2+3+2+4+2+3+2+6+2+3+2+4+2+3+2+5+2+50-25=97个2
一共有5:
5-1,10-1,15-1,20-1,25-2,30-1,35-1,40-1,45-1,50-2,55-1,60-1,65-1,70-1,75-2,80-1,85-1,90-1,95-1,100-2
一共有20+4=24个5
所以100!的后面有24个0
发表于 2015-06-18 17:53:03 回复(0)
答案:C(24)
解释
给定一个整数N,求其N!中末尾0的个数可以转化为  N! = K×10^M ——>  N! = (2^x) × (3^y) × (5^z),在此有两种办法,分别为
    //方法1: 计算z,直接计算1~N的因式分解中5的指数(因为能被5整除的概率小于被2整除的概率,所以选z),然后求和
    //方法2:z = [N/5] + [N/5^2] + [N/5^3] + ...;[N/5]表示不大于N的数中5的倍数贡献一个5,[N/5^2]表示不大于N的数中5^2的倍数贡献一个5
    所以,结果 = 100/5 + 100/25 = 24;
发表于 2015-06-18 09:23:56 回复(1)
徐头像
将所有5的倍数和4相乘,然后用while循环除十取余
public static void main(String[] args) {
  double sum=1;
  int count=0;
  for(int i=1;i<=20;i++){
   sum=sum*5*i*4;
   while(sum%10==0){
    sum=sum/10;
    count++;
   }
  }
  System.out.println(count);
 }

发表于 2015-06-17 11:21:18 回复(2)
import java.math.BigDecimal;
public class Test100 {
    public static void main(String[] args) {
    //由于100!结果太大,只能用BigDecimal
        BigDecimal result= BigDecimal.valueOf(1);
        for(int i=1;i<=100;i++){
            result=result.multiply(BigDecimal.valueOf(i));
        }
        System.out.println(result);//输出结果以待验证
        int len=result.toString().length();//将结果转为字符串,并取得长度
        String str=result.toString();//结果转为字符串来操作
        //循环从字符串的最后一个来,直到不是零为止,循环了几次就有几个零
        for(int j=0;j<len;j++){
            if(!(str.charAt(len-1-j)=='0')){
                System.out.println(j);
                return;
            }
        }
    }
}
发表于 2015-06-17 09:23:36 回复(1)
选择C。
要求阶乘后的结果中有多少0。而相乘可以出现末尾数字为0 的情况只有这两个数的质数包含2和5的情况。在1~100中,只要是偶数他的因数都包含2,而因数包含5的就是5的倍数。而25,50,75都包含两个因数5.1~100中5的倍数有19个,加上25,50,75多的一个,在加上100中的两个,所以一共19+3+2=24个0.
发表于 2015-06-16 23:06:50 回复(0)
有几个0就是看有几个5,而25,50,75,100这都是有两个0,剩下的都是含有5的个数有16个,所以就有24个0
发表于 2015-06-16 22:02:43 回复(0)