求10000!的阶乘末尾一共有多少个0

结果中的 0 是如何产生的呢?

1.有些数字本身含有 0 ,例如数字10、20、30…

2.数字(10的整数倍以外的数字)相乘结果得到10的倍数,如尾数为2、4、6、8的数字与5相乘

而每一个10的整数倍的数字都可以写成 5*k 的形式
那么




10000! = 1 ∗ 2 ∗ 3 ∗ 4 ∗ 5 ∗ . . . . . . ∗ 10 ∗ . . . . . . ∗ 15 ∗ . . . . . . ∗ 20 ∗ . . . . . . ∗ 25 ∗ . . . . . . ∗ 30 ∗ . . . . . . ∗ 35 ∗ . . . . . . ∗ 40 ∗ . . . . . . ∗ 45 ∗ . . . . . . ∗ 50 ∗ . . . . . . . . . . . . . . ∗ 10000 1*2*3*4*5*......*10*......*15*......*20*......*25*......*30*......*35*......*40*......*45*......*50*..............*10000 12345......10......15......20......25......30......35......40......45......50..............10000

可以写成:

Ⅰ: 10000 ! = 1 ∗ 2 ∗ 3 ∗ 4 ∗ ( 5 ∗ 1 ) ∗ . . . . . . ∗ ( 5 ∗ 2 ) ∗ . . . . . . ∗ ( 5 ∗ 3 ) ∗ . . . . . . ∗ ( 5 ∗ 4 ) ∗ . . . . . . ∗ ( 5 ∗ 5 ) ∗ . . . . . . ∗ ( 5 ∗ 6 ) ∗ . . . . . . ∗ ( 5 ∗ 7 ) ∗ . . . . . . ∗ ( 5 ∗ 8 ) ∗ . . . . . . ∗ ( 5 ∗ 9 ) ∗ . . . . . . ∗ ( 5 ∗ ( 5 ∗ 2 ) ) ∗ . . . . . . . . . . . . . . ∗ ( 5 ∗ ( 5 ∗ ( 5 ∗ ( 5 ∗ 2 ) ) ) ) 10000! = 1*2*3*4*(5*1)*......*(5*2)*......*(5*3)*......*(5*4)*......*(5*5)*......*(5*6)*......*(5*7)*......*(5*8)*......*(5*9)*......*(5*(5*2))*..............*(5*(5*(5*(5*2)))) 10000!=1234(51)......(52)......(53)......(54)......(55)......(56)......(57)......(58)......(59)......(5(52))..............(5(5(5(52))))

其中尾数为2、4、6、8的数字个数是足够的,所以这个式子中 5 的个数即为10000!末尾0的个数。




第一种写法:

#include <stdio.h>
int main(){
    
    
	int i,num = 10000;
	int count=0;
	for(i=5;i<=10000;i=i+5){
    
    
        if(i%5==0){
    
      // 若该数字能被5整除,即分解出来的因子中有至少有一个5,count+1 
            count++;  
        }   
        if(i%25==0){
    
      // 若该数字能被25(5*5)整除,即分解出来的因子中有至少有两个5,count+1 
            count++;
        }   
        if(i%125==0){
    
      // 若该数字能被125(5*5*5)整除,即分解出来的因子中有至少有三个5,count+1 
            count++;
        }   
        if(i%625==0){
    
      // 若该数字能被125(5*5*5*5)整除,即分解出来的因子中有至少有四个5,count+1
            count++;
        }   
        if(i%3125==0){
    
      // 若该数字能被3125(5*5*5*5*5)整除,即分解出来的因子中有至少有五个5,count+1
            count++;
        }   
    }
    printf("%d\n",count);
    return 0;
}


第二种写法(简便):

#include <stdio.h>
int main(){
    
    
    int num = 10000,con=0;
    while(num/5!=0){
    
    
        con += num/5;
        num = num/5;
    }   
    
    printf("%d\n",con);
    return 0;
}

1-10000中能够分解成5*k的形式的数字个数有

      10000/5=2000个

把这2000个数字除以5还能写成5*k的形式的数字有

      2000/5=400个

把这400个数字除以5还能写成5*k的形式的数字有

      400/5=80个

把这80个数字除以5还能写成5*k的形式的数字有

      80/5=16个

把这16个数字除以5还能写成5*k的形式的数字有

      16/5=3个

所以共含有2000+400+80+16+3=2499个5,即10000!末尾有2499个0.

转载于:10000!末尾有多少个0?

猜你喜欢

转载自blog.csdn.net/LUCAS004/article/details/107295379
今日推荐