Comprobar si el equivalente binario de un número termina con la string dada o no

Dado un entero positivo N , la tarea es verificar si el equivalente binario de ese entero termina con la string dada str o no. 
Escriba «Sí» si termina en «str». De lo contrario, escriba “No”.
Ejemplos :

Entrada: N = 23, str = “111”
Salida:
Explicación:
Binario de 23 = 10111, que termina en “111”

Entrada: N = 5, str = “111”
Salida: No

Enfoque : la idea es encontrar el equivalente binario de N y verificar si str es un sufijo de su equivalente binario.

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

C++

// C++ implementation of the
// above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function returns true if
// s1 is suffix of s2
bool isSuffix(string s1, string s2)
{
    int n1 = s1.length();
    int n2 = s2.length();
    if (n1 > n2)
        return false;
    for (int i = 0; i < n1; i++)
        if (s1[n1 - i - 1] != s2[n2 - i - 1])
            return false;
    return true;
}
 
// Function to check if binary equivalent
// of a number ends in "111" or not
bool CheckBinaryEquivalent(int N, string str)
{
 
    // To store the binary
    // number
    int B_Number = 0;
    int cnt = 0;
 
    while (N != 0) {
 
        int rem = N % 2;
        int c = pow(10, cnt);
        B_Number += rem * c;
        N /= 2;
 
        // Count used to store
        // exponent value
        cnt++;
    }
 
    string bin = to_string(B_Number);
    return isSuffix(str, bin);
}
 
// Driver code
int main()
{
 
    int N = 23;
    string str = "111";
    if (CheckBinaryEquivalent(N, str))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}

Java

// Java implementation of the
// above approach
class GFG{
 
// Function returns true if
// s1 is suffix of s2
static boolean isSuffix(String s1, String s2)
{
    int n1 = s1.length(),
        n2 = s2.length();
         
    if (n1 > n2)
        return false;
         
    for(int i = 0; i < n1; i++)
        if (s1.charAt(n1 - i - 1) !=
            s2.charAt(n2 - i - 1))
        return false;
         
    return true;
}
 
// Function to check if binary equivalent
// of a number ends in "111" or not
static boolean CheckBinaryEquivalent(int N,
                                     String str)
{
 
    // To store the binary
    // number
    int B_Number = 0;
    int cnt = 0;
 
    while (N != 0)
    {
        int rem = N % 2;
        int c = (int)Math.pow(10, cnt);
        B_Number += rem * c;
        N /= 2;
 
        // Count used to store
        // exponent value
        cnt++;
    }
     
    String bin = Integer.toString(B_Number);
    return isSuffix(str, bin);
}
 
// Driver code
public static void main(String[] args)
{
    int N = 23;
    String str = "111";
     
    if (CheckBinaryEquivalent(N, str))
        System.out.print("Yes\n");
    else
        System.out.print("No\n");
}
}
 
// This code is contributed by shubham

Python3

# Python3 implementation of the
# above approach
  
# Function returns true if
# s1 is suffix of s2
def isSuffix(s1, s2):
 
    n1 = len(s1)
    n2 = len(s2)
     
    if(n1 > n2):
        return False
    for i in range(n1):
     
        if (s1[n1 - i - 1] !=
            s2[n2 - i - 1]):
            return False;
    return True;
 
# Function to check if
# binary equivalent of a
# number ends in "111" or not
def CheckBinaryEquivalent(N, s):
  
    # To store the binary
    # number
    B_Number = 0;
    cnt = 0;
  
    while (N != 0):
  
        rem = N % 2;
        c = pow(10, cnt);
        B_Number += rem * c;
        N //= 2;
  
        # Count used to store
        # exponent value
        cnt += 1;   
  
    bin = str(B_Number);   
    return isSuffix(s, bin);
   
# Driver code   
if __name__ == "__main__":
     
    N = 23;
    s = "111";
     
    if (CheckBinaryEquivalent(N, s)):
        print("Yes")
    else:
        print("No")
 
# This code is contributed by rutvik_56

C#

// C# implementation of the 
// above approach 
using System;
using System.Collections;
 
class GFG{
 
// Function returns true if
// s1 is suffix of s2
static bool isSuffix(String s1, String s2)
{
    int n1 = s1.Length,
        n2 = s2.Length;
         
    if (n1 > n2)
        return false;
         
    for(int i = 0; i < n1; i++)
        if (s1[n1 - i - 1] !=
            s2[n2 - i - 1])
        return false;
         
    return true;
}
 
// Function to check if binary equivalent
// of a number ends in "111" or not
static bool CheckBinaryEquivalent(int N,
                                  String str)
{
     
    // To store the binary
    // number
    int B_Number = 0;
    int cnt = 0;
 
    while (N != 0)
    {
        int rem = N % 2;
        int c = (int)Math.Pow(10, cnt);
        B_Number += rem * c;
        N /= 2;
 
        // Count used to store
        // exponent value
        cnt++;
    }
    String bin = B_Number.ToString();
    return isSuffix(str, bin);
}
 
// Driver Code
public static void Main (String[] args)
{
    int N = 23;
    String str = "111";
     
    if (CheckBinaryEquivalent(N, str))
        Console.WriteLine("Yes\n");
    else
        Console.WriteLine("No\n");
}
}
 
// This code is contributed by jana_sayantan

Javascript

<script>
 
// Javascript implementation of the
// above approach
 
// Function returns true if
// s1 is suffix of s2
function isSuffix(s1, s2)
{
    var n1 = s1.length;
    var n2 = s2.length;
    if (n1 > n2)
        return false;
    for (var i = 0; i < n1; i++)
        if (s1[n1 - i - 1] != s2[n2 - i - 1])
            return false;
    return true;
}
 
// Function to check if binary equivalent
// of a number ends in "111" or not
function CheckBinaryEquivalent(N, str)
{
 
    // To store the binary
    // number
    var B_Number = 0;
    var cnt = 0;
 
    while (N != 0) {
 
        var rem = N % 2;
        var c = Math.pow(10, cnt);
        B_Number += rem * c;
        N = parseInt(N/2);
 
        // Count used to store
        // exponent value
        cnt++;
    }
 
    var bin = B_Number.toString();
    return isSuffix(str, bin);
}
 
// Driver code
var N = 23;
var str = "111";
if (CheckBinaryEquivalent(N, str))
    document.write( "Yes");
else
    document.write( "No");
 
 
</script>
Producción: 

Yes

Complejidad de tiempo: O(|str|)

Espacio auxiliar: O (log 2 (N)) ya que estamos creando un contenedor de strings adicional para convertir N en su string binaria equivalente

Publicación traducida automáticamente

Artículo escrito por spp____ 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 *