Compruebe si N se puede obtener de 1 multiplicando repetidamente por 10 o 20

Dado un número entero N , la tarea es determinar si es posible obtener el valor N de 1 multiplicando repetidamente por 10 o 20. Escriba Sí si es posible o No en caso contrario.
Ejemplos: 
 

Entrada: N = 200 
Salida: SI 
Explicación: 
1 * 10 -> 10 * 20 -> 200
Entrada: N = 90 
Salida: NO 
 

Enfoque: 
siga los pasos a continuación para resolver el problema: 
 

  1. Cuente el número de ceros finales.
  2. Después de eliminar los ceros finales, si el N restante no se puede expresar como una potencia de 2, imprima NO .
  3. De lo contrario, si log 2 N <= Recuento de ceros finales, imprima Sí.

A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ program to check if N
// can be obtained from 1 by
// repetitive multiplication
// by 10 or 20
#include<bits/stdc++.h>
using namespace std;
 
// Function to check if N can
// be obtained or not
void Is_possible(long long int N)
{
    int C = 0;
    int D = 0;
     
    // Count and remove trailing
    // zeroes
    while (N % 10 == 0)
    {
        N = N / 10;
        C += 1;
    }
     
    // Check if remaining
    // N is a power of 2
    if(pow(2, (int)log2(N)) == N)
    {
        D = (int)log2(N);
         
        // To check the condition
        // to print YES or NO
        if (C >= D)
            cout << "YES";
        else
            cout << "NO";
    }
    else
        cout << "NO";
}
 
// Driver code
int main()
{
    long long int N = 2000000000000;
     
    Is_possible(N);
}
 
// This code is contributed by Stream_Cipher

Java

// Java program to check if N
// can be obtained from 1 by
// repetitive multiplication
// by 10 or 20
import java.util.*;
 
class GFG{
     
static void Is_possible(long N)
{
    long C = 0;
    long D = 0;
     
    // Count and remove trailing
    // zeroes
    while (N % 10 == 0)
    {
        N = N / 10;
        C += 1;
    }
     
    // Check if remaining
    // N is a power of 2
    if(Math.pow(2, (long)(Math.log(N) /
                         (Math.log(2)))) == N)
    {
        D = (long)(Math.log(N) / (Math.log(2)));
         
        // To check the condition
        // to prlong YES or NO
        if (C >= D)
            System.out.print("YES");
        else
            System.out.print("NO");
    }
    else
        System.out.print("NO");
}
 
// Driver code
public static void main(String args[])
{
    long N = 2000000000000L;
    Is_possible(N);
}
}
 
// This code is contributed by Stream_Cipher

Python

# Python Program to check if N
# can be obtained from 1 by
# repetitive multiplication
# by 10 or 20
 
import math
 
# Function to check if N can
# be obtained or not
def Is_possible(N):
 
    C = 0
    D = 0
 
    # Count and remove trailing
    # zeroes
    while ( N % 10 == 0):
        N = N / 10
        C += 1
 
    # Check if remaining
    # N is a power of 2
    if ( math.log(N, 2)
    - int(math.log(N, 2)) == 0):
 
        D = int(math.log(N, 2))
 
        # To check the condition
        # to print YES or NO
        if (C >= D):
            print("YES")
             
        else:
            print("NO")
     
    else:
        print("NO")
             
# Driver Program
N = 2000000000000
Is_possible(N)

C#

// C# program to check if N
// can be obtained from 1 by
// repetitive multiplication
// by 10 or 20
using System;
 
class GFG{
     
static void Is_possible(long N)
{
    long C = 0;
    long D = 0;
     
    // Count and remove trailing
    // zeroes
    while (N % 10 == 0)
    {
        N = N / 10;
        C += 1;
    }
     
    // Check if remaining
    // N is a power of 2
    if(Math.Pow(2, (long)(Math.Log(N) /
                         (Math.Log(2)))) == N)
    {
        D = (long)(Math.Log(N) / (Math.Log(2)));
         
        // To check the condition
        // to prlong YES or NO
        if (C >= D)
            Console.WriteLine("YES");
        else
            Console.WriteLine("NO");
    }
    else
        Console.WriteLine("NO");
}
 
// Driver Code
public static void Main()
{
    long N = 2000000000000L;
     
    Is_possible(N);
}
}
 
// This code is contributed by Stream_Cipher

Javascript

<script>
// Java  script program to check if N
// can be obtained from 1 by
// repetitive multiplication
// by 10 or 20
 
function Is_possible( N)
{
    let  C = 0;
    let  D = 0;
     
    // Count and remove trailing
    // zeroes
    while (N % 10 == 0)
    {
        N = N / 10;
        C += 1;
    }
     
    // Check if remaining
    // N is a power of 2
    if(Math.pow(2, (Math.log(N) /
                        (Math.log(2)))) == N)
    {
        D = (Math.log(N) / (Math.log(2)));
         
        // To check the condition
        // to prlong YES or NO
        if (C >= D)
            document.write("YES");
        else
            document.write("NO");
    }
    else
        document.write("NO");
}
 
// Driver code
 
    let  N = 2000000000000;
    Is_possible(N);
 
//this code is contributed by sravan kumar
</script>
Producción: 

YES

 

Complejidad de tiempo: O(log 10 (N))  
Espacio auxiliar: O(1)
 

Publicación traducida automáticamente

Artículo escrito por vermashivani543 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *