📜  在将n个数字相乘后找到末尾的连续零个数字

📅  最后修改于: 2021-05-07 05:07:35             🧑  作者: Mango

给定一个具有n个数字的数组。任务是在将所有n个数字相乘后,在最后打印连续的零的数字。
例子 :

Input : arr[] = {100, 10}
Output : 3
Explanation : 100 x 10 = 1000,
3 zero's at the end.

Input : arr[] = {100, 10, 5, 25, 35, 14}
Output : 4
Explanation :
100 x 10 x 5 x 25 x 35 x 14 = 61250000,
4 zero's at the end

天真的方法:
首先将所有数字相乘,然后保存到字符串(因为如果乘法数大到2 ^ 64,那么它将给出错误的信息,因此将每一个倍数都存储在字符串),然后计算零的数量。
高效的方法:
首先计算n个数字的2的因数,然后计算所有n个数字的5的因数,然后打印最小的一个。
例如 –

n_number's  | 2's factor | 5's factor 
100         |     2      |    2
10          |     1      |    1
5           |     0      |    1
25          |     0      |    2
35          |     0      |    1 
14          |     1      |    0
Total       |     4      |    7

we can take a minimum so there number of 
zero's is 4 

下面是上述方法的实现:

C++
// CPP program to find the number of consecutive zero
// at the end after multiplying n numbers
#include
using namespace std;
 
// Function to count two's factor
int two_factor(int n)
{   
    // Count number of 2s present in n
    int twocount = 0;
    while (n % 2 == 0)
    {
        twocount++;
        n = n / 2;
    }
    return twocount;
}
 
// Function to count five's factor
int five_factor(int n)
{
    int fivecount = 0;
    while (n % 5 == 0)
    {
        fivecount++;
        n = n / 5;
    }
    return fivecount;
}
 
// Function to count number of zeros
int find_con_zero(int arr[], int n)
{
    int twocount = 0;
    int fivecount = 0;
    for (int i = 0; i < n; i++) {
 
        // Count the two's factor of n number
        twocount += two_factor(arr[i]);
 
        // Count the five's factor of n number
        fivecount += five_factor(arr[i]);
    }
 
    // Return the minimum
    if (twocount < fivecount)
        return twocount;
    else
        return fivecount;
}
 
// Driver Code
int main()
{
    int arr[] = { 100, 10, 5, 25, 35, 14 };
    int n = 6;
    cout << find_con_zero(arr, n);
}


Java
// Java program to find the number
// of consecutive zero at the end
// after multiplying n numbers
 
public class GfG{
 
    // Function to count two's factor
    static int two_factor(int n)
    {    
        // Count number of 2s
        // present in n
        int twocount = 0;
        while (n % 2 == 0)
        {
            twocount++;
            n = n / 2;
        }
        return twocount;
    }
 
    // Function to count five's
    // factor
    static int five_factor(int n)
    {
        int fivecount = 0;
        while (n % 5 == 0)
        {
            fivecount++;
            n = n / 5;
        }
        return fivecount;
    }
 
    // Function to count number of zeros
    static int find_con_zero(int arr[], int n)
    {
        int twocount = 0;
        int fivecount = 0; 
         
        for (int i = 0; i < n; i++) {  
 
            // Count the two's factor
            // of n number
            twocount += two_factor(arr[i]);
 
            // Count the five's factor
            // of n number
            fivecount += five_factor(arr[i]);
        }
 
        // Return the minimum
        if (twocount < fivecount)
            return twocount;
        else
            return fivecount;
    }
     
    // driver function
    public static void main(String s[])
    {
        int arr[] = { 100, 10, 5, 25, 35, 14 };
        int n = 6;
        System.out.println(find_con_zero(arr, n));    
    }
}
 
// This code is contributed by Gitanjali


Python3
# Python3 code to find the number of consecutive zero
# at the end after multiplying n numbers
 
# Function to count two's factor
def two_factor( n ):
 
    # Count number of 2s present in n
    twocount = 0
    while n % 2 == 0:
        twocount+=1
        n =int( n / 2)
    return twocount
     
# Function to count five's factor
def five_factor( n ):
    fivecount = 0
    while n % 5 == 0:
        fivecount+=1
        n = int(n / 5)
    return fivecount
 
# Function to count number of zeros
def find_con_zero( arr, n ):
    twocount = 0
    fivecount = 0
    for i in range(n):
 
        # Count the two's factor of n number
        twocount += two_factor(arr[i])
         
        # Count the five's factor of n number
        fivecount += five_factor(arr[i])
     
    # Return the minimum
    if twocount < fivecount:
        return twocount
    else:
        return fivecount
 
# Driver Code
arr = [ 100, 10, 5, 25, 35, 14 ]
n = 6
print(find_con_zero(arr, n))
 
# This code is contributed by "Sharad_Bhardwaj".


C#
// C# program to find the number
// of consecutive zero at the end
// after multiplying n numbers
using System;
 
public class GfG {
 
    // Function to count two's factor
    static int two_factor(int n)
    {
         
        // Count number of 2s
        // present in n
        int twocount = 0;
         
        while (n % 2 == 0)
        {
            twocount++;
            n = n / 2;
        }
         
        return twocount;
    }
 
    // Function to count five's
    // factor
    static int five_factor(int n)
    {
        int fivecount = 0;
         
        while (n % 5 == 0)
        {
            fivecount++;
            n = n / 5;
        }
         
        return fivecount;
    }
 
    // Function to count number of zeros
    static int find_con_zero(int []arr, int n)
    {
        int twocount = 0;
        int fivecount = 0;
         
        for (int i = 0; i < n; i++) {
 
            // Count the two's factor
            // of n number
            twocount += two_factor(arr[i]);
 
            // Count the five's factor
            // of n number
            fivecount += five_factor(arr[i]);
        }
 
        // Return the minimum
        if (twocount < fivecount)
            return twocount;
        else
            return fivecount;
    }
     
    // driver function
    public static void Main()
    {
         
        int []arr = { 100, 10, 5, 25, 35, 14 };
        int n = 6;
         
        Console.WriteLine(find_con_zero(arr, n));
    }
}
 
// This code is contributed by vt_m.


PHP


Javascript


输出 :

4