首页 > 试题广场 >

末尾0的个数

[编程题]末尾0的个数
  • 热度指数:31108 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2

输入描述:
输入为一行,n(1 ≤ n ≤ 1000)


输出描述:
输出一个整数,即题目所求
示例1

输入

10

输出

2
import java.util.Scanner;

public class text {
    public static void main(String[] args) {
        //输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2
        Scanner fac = new Scanner(System.in);
        System.out.println("从键盘上输入数字:");
        int f = fac.nextInt();
        fac(f);
    }
    public static void count(int fac){
        int count = 0;
        while(fac != 0){
            if(fac % 10 == 0){
                count++;
            }else{
                break;
            }
            fac /= 10;
        }
        System.out.println("该阶乘零的个数有:" + count);
    }
    public static void fac(int f){
        int fac = 1;
        for(int i = 1; i <= f;i++){
            fac *= i;
        }
        System.out.println(f + "的阶乘为:" + fac);
        count(fac);
    }

发表于 2023-04-11 11:49:47 回复(0)
import java.util.Scanner;
import java.math.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int count=0;
        BigInteger b=BigInteger.ONE;
        for(int i=n;i>=1;i--){
            BigInteger b1=BigInteger.valueOf(i);
            b=b1.multiply(b);
           
        }
        BigInteger modd=BigInteger.valueOf(10);
        BigInteger mox=BigInteger.ZERO;
        while((b.mod(modd)).compareTo(mox)==0){
            count++;
            b=b.divide(modd);
        }
        System.out.println(count);
    }
}
发表于 2022-02-20 17:59:07 回复(0)
import java.util.Scanner;
public class 末尾0的个数{
	
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
        	int num = sc.nextInt();
        	System.out.println(countZeroOfNum(num));
        }
        sc.close();
    }
    
    /*
		尾部所有的0都是由因子5*2得到的,
		由于2、6、8 都可以视为因子2,则 因子2的个数远大于因子5的个数,
		所以只需要求出因子5的个数即可。
     * */
    public static int countZeroOfNum(int num){
    	int zeroCount = 0;
    	while(num > 4){
    		int temp = num;
    		//由于25,125这个数不止含有一个因子5,所以需要求完后,再调用n/5
    		while(temp % 5 == 0){
				zeroCount++;
				temp = temp / 5;
    		}
    		num = num-1;
    	}
    	return zeroCount;
    }
    
}

发表于 2020-07-27 14:12:45 回复(0)
Java实现,已通过。
这道题主要是要发现:末尾0是由偶数*5得到的,而偶数个数很多,我们可以找5的个数,当前n=5的倍数,最小5起步,它之前一定能找到偶数,(不愁偶数或2 的个数,5的倍数中间隔4隔数,一定可以分解出偶数 或2的。)每个偶数*5可以得到末尾1个0,而(偶数*5)*(偶数*5)可以得到末尾2个0 ,同理,偶数*5)*(偶数*5)*偶数*5)可以得到末尾3个零,也就是说,从当前数字n一直到1 ,可以得到的“5”的个数之和,就是末尾0的个数。
从n遍历到1,每个数分解因数后可以得到的5的个数求总和即可,代码如下:
import java.util.*;
public class Main{
  public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int zeros=0;
      for(int i=n;i>0;i--)
     {   
          int m=i;
          while (m%5==0)
         { 
             zeros++;
           m=m/5;  
         }
     }
        System.out.println(zeros);     
    }
}


编辑于 2020-02-04 18:43:44 回复(0)
import java.util.Scanner;

public class Test03 {

    public static int getZero(int num){
        return num==0?0:num/5+getZero(num/5);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        System.out.println(getZero(num));
    }
}
发表于 2019-03-18 23:36:28 回复(0)
import java.util.Scanner;
public class Main
{
    public static void main(String[] args)
    {
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        int count=0;
        for(int i=1;i<=n;i++){
            int tem=i;
            while(0==(tem%5)){
                count++;
                tem=tem/5;
            }
        }
        System.out.println(count);

    }
}

发表于 2019-01-20 21:56:52 回复(0)
用递归写的
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(fun(n));
    }

    public static int fun(int n) {
        int res = 0;
        if (n == 0)
            return 0;
        res = fun(n / 5) + n / 5;
        return res;
    }
}

发表于 2018-11-20 14:12:29 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int res = 0;
        n=n/5;
        while(n!=0){
            res += n;
            n = n/5;
        }
        System.out.println(res);
    }
}
发表于 2018-10-22 12:27:06 回复(0)
public class Main {

    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        int p=scan.nextInt();
        int sum=0;
        int con=1;
        for (int j = p; j >0; j--) {
            
            con*=j;
            if (con%10==0) {
                sum++;
                con/=10;
            }
            con%=10000;
            
        }
        System.out.println(sum);
    }
    
}

发表于 2018-10-01 12:18:05 回复(0)

import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
BigInteger n=new BigInteger(sc.next());
StringBuffer sb=new StringBuffer(factorial(n).toString(10));
String regex="[^0]";
String[] strs=sb.reverse().toString().split(regex);
if(strs.length==0) {
System.out.println("0");
}else {
System.out.println(strs[0].length());
}

}
private static BigInteger factorial(BigInteger n) {
    if(n.intValue()==1) {
        return n; 
    }else {
        return n.multiply(factorial(new BigInteger(String.valueOf((n.intValue()-1)))));
    }                
}

}
BigInteger是个好东东,哈哈哈

发表于 2018-06-23 11:46:48 回复(0)
import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        BigInteger mul = mulCount2(num);
        int countZero = test(mul);
        System.out.println(countZero);
        sc.close();
    }

    private static BigInteger mulCount2(int num) {
        BigInteger result = new BigInteger("1");
        for (long i = num; i > 1; --i) {
            result = result.multiply(new BigInteger("" + i));
        }
        return result;
    }

    private static int test(BigInteger mul) {
        int num = 0;
        StringBuffer s = new StringBuffer();
        s.append(mul);
        s.reverse();

        String[] arr = s.toString().split("");
        for (String string : arr) {
            if ("0".equals(string)) {
                ++num;
            } else {
                break;
            }

        }
        return num;
    }
}
编辑于 2018-03-22 10:45:22 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        int n = Integer.parseInt(str);
        int count = 0 ;
        while (n/5!=0) {
            n = n/5;
            count += n ;
        }
        System.out.println(count);
    }
哇哇,学习!评论区多大神


发表于 2018-03-02 12:29:09 回复(0)
import java.util.*;

public class Main {     /**      * @param args      */     public static void main(String[] args){         Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        int count=0;
        int tempnum=0;
        for(int i=1;i<=num;i++){
            tempnum=i;
            while(tempnum%5==0){
                count++;
                tempnum=tempnum/5;
            }
        }
        System.out.println(count);
    }
}


发表于 2018-02-04 13:20:24 回复(0)
public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNextInt()){

            int num = scanner.nextInt();
            int result = 0;

            for(int i = 1;i <= num;i++){

                int temp = i;
                while(temp%10 == 0 && temp != 0){
                    result++;
                    temp /= 10;
                }

                while(temp%5 == 0 && temp != 0){
                    result++;
                    temp /= 5;
                }
            }

            System.out.println(result);
        }

    }

}
发表于 2018-01-15 17:27:42 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int num = in.nextInt();
            int count = 0;
            while (num > 0) {
                num = num / 5;
                count += num;
            }
            System.out.println(count);
        }
    }
}

发表于 2017-12-11 19:33:38 回复(0)
import java.util.Scanner;   public class Main
{  public static void main(String args[])
    {
        Scanner scanner = new Scanner(System.in);  while (scanner.hasNext()) 
        {  int n = Integer.parseInt(scanner.nextLine());  //            long result = 1;  //            for (int i = 1; i <= n; i++) {  //                result *= i; //                System.out.println(result);  //            }  //            String string = String.valueOf(result);  //            System.out.println(string); //            int count = 0;  //            for (int i = string.length() - 1; i >= 0; i--) {  //                if (string.charAt(i) == '0') { //                    count++;  //                } else {  //                    break;  //                } //            }  //            System.out.println(count);   int count=0;  while(n/5!=0){
                n=n/5;   count+=n;   }
            System.out.println(count);   }
    }
}

这道题关键在于n的范围是1000以内,如果直接用求n!然后转字符串,进行操作的话,即使用long型也会溢出,是行不通的,所以我们就需要找到规律,到底接乘后面的0的个数有什么规律呢,结果看了别人的代码之后发现应该是上面代码中那样的规律,从这个题,我惊奇的发现,牛客上的测试用例真是少到爆炸了,我把不通过的测试用例写死居然都过了,
发表于 2017-11-22 21:34:33 回复(0)
两个数相乘,末尾为0,一定是两个数的分解质因数中的2*5,之前想还有10等?后面想想,10可以分解成5*2,所以还是5*2;
据说5一定比2多,这需要多想会,因为5的倍数要么就是个偶数,要么就前面贴着偶数,所以一般都有2,因此也就是比2多了
发表于 2017-09-06 22:02:10 回复(0)
为什么只通过40%?
import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        long m=1;
        for(int i=n;i>1;i--){
            m*=i;
        }
        String s=String.valueOf(m);
        int count=0;
        for(int j=0;j<s.length();j++){
            if(s.charAt(j)=='0'){
                count++;
            }
        }
        System.out.println(count);
    }
}

发表于 2017-08-30 17:43:59 回复(1)
import java.util.Scanner;

/**
 * 输入一个正整数n,求n!(即阶乘)末尾有多少个0?
 * 比如: n = 10; n! = 3628800,所以答案为2
 */
public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            int result = 0;
            while (n != 0) {
                result += n / 5;
                n /= 5;
            }
            System.out.println(result);
        }
    }
}

编辑于 2017-08-15 14:13:10 回复(0)