Compara dadas dos potencias de 10

Dados 4 enteros A, B, Z1 y Z2. La tarea es comparar A*10 Z1 y B*10 Z2 . 

Ejemplos:

Entrada: A = 19, Z1 = 2, B = 20, Z2 = 1
Salida: A > B
Explicación:
A se puede escribir como 1900 
B se puede escribir como 200 
Entonces, A es mayor que B.

Entrada:, A = 199, Z1 =10, B = 96, Z2 = 1000
Salida: A < B
Explicación:
A se puede escribir como 19900000…. 
B se puede escribir como 9600000……
Entonces, A es más pequeño que B

Enfoque ingenuo: multiplique A con ceros Z1 y B con ceros Z2 y compare ambos. Pero un número grande no se puede almacenar en enteros largos de más de 18 dígitos.
Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1)

Enfoque eficiente: la idea es comparar el número total de dígitos en A y B porque el número de dígitos más grande es mayor que el otro.

  • Tome dos variables y adigits y bdigits e inicialice a cero .
  • Inicialice las variables tempA y tempB como A y B y recorra el ciclo while y almacene el número de dígitos en A y B.
  • Compara los valores de adigits+z1 y bdigits+z2. Si sus valores son iguales, realice las siguientes tareas:
    • Si adigits es mayor que bdigits, entonces inicialice las variables addZeros como adigits-bdigits y b como 10 addZeros y viceversa si bdigits es mayor que adigits.
  • Ahora, compare los valores de a y b , realice los resultados.

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

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to compare 2 numbers A and B
string CompareNumbers(int a, int b,
                      int z1, int z2)
{
 
    // Calculate number of digits
    // in both the numbers
    int Adigits = 0, Bdigits = 0;
    int tempA = a, tempB = b;
 
    while (tempA != 0) {
        Adigits++;
        tempA /= 10;
    }
    while (tempB != 0) {
        Bdigits++;
        tempB /= 10;
    }
 
    // Now compare both the digits with
    // adding zeroes
    if (Adigits + z1 > Bdigits + z2) {
        return ">";
    }
    else if (Adigits + z1 < Bdigits + z2) {
        return "<";
    }
 
    // If both condition are not true means
    // they have equal digits So now add zeroes
    // in smaller digit number to make equal
    // digits number as larger
 
    if (Adigits > Bdigits) {
        int addzeroes = Adigits - Bdigits;
        b *= pow(10, addzeroes);
    }
    else {
        int addzeroes = Bdigits - Adigits;
        a *= pow(10, addzeroes);
    }
    if (a == b) {
        return "=";
    }
    else if (a > b) {
        return ">";
    }
    else {
        return "<";
    }
}
 
// Driver Code
int main()
{
 
    int a = 20, z1 = 2;
    int b = 200, z2 = 1;
    string ans = CompareNumbers(a, b, z1, z2);
    cout << "A " << ans << " B";
    return 0;
}

Java

// Java program for the above approach
class GFG {
 
  // Function to compare 2 numbers A and B
  static String CompareNumbers(int a, int b,
                               int z1, int z2) {
 
    // Calculate number of digits
    // in both the numbers
    int Adigits = 0, Bdigits = 0;
    int tempA = a, tempB = b;
 
    while (tempA != 0) {
      Adigits++;
      tempA /= 10;
    }
    while (tempB != 0) {
      Bdigits++;
      tempB /= 10;
    }
 
    // Now compare both the digits with
    // adding zeroes
    if (Adigits + z1 > Bdigits + z2) {
      return ">";
    } else if (Adigits + z1 < Bdigits + z2) {
      return "<";
    }
 
    // If both condition are not true means
    // they have equal digits So now add zeroes
    // in smaller digit number to make equal
    // digits number as larger
 
    if (Adigits > Bdigits) {
      int addzeroes = Adigits - Bdigits;
      b *= (int) Math.pow(10, addzeroes);
    } else {
      int addzeroes = Bdigits - Adigits;
      a *= (int) Math.pow(10, addzeroes);
    }
    if (a == b) {
      return "=";
    } else if (a > b) {
      return ">";
    } else {
      return "<";
    }
  }
 
  // Driver Code
  public static void main(String args[]) {
 
    int a = 20, z1 = 2;
    int b = 200, z2 = 1;
    String ans = CompareNumbers(a, b, z1, z2);
    System.out.println("A " + ans + " B");
  }
}
 
// This code is contributed by gfgking

Python3

# Python code for the above approach
 
# Function to compare 2 numbers A and B
def CompareNumbers(a, b, z1, z2):
 
    # Calculate number of digits
    # in both the numbers
    Adigits = 0
    Bdigits = 0
    tempA = a
    tempB = b
 
    while (tempA != 0):
        Adigits += 1
        tempA = tempA // 10
    while (tempB != 0):
        Bdigits += 1
        tempB = tempB // 10
 
    # Now compare both the digits with
    # adding zeroes
    if (Adigits + z1 > Bdigits + z2):
        return ">";
    elif (Adigits + z1 < Bdigits + z2):
        return "<";
 
    # If both condition are not true means
    # they have equal digits So now add zeroes
    # in smaller digit number to make equal
    # digits number as larger
    if (Adigits > Bdigits):
        addzeroes = Adigits - Bdigits;
        b *= (10 ** addzeroes)
    else:
        addzeroes = Bdigits - Adigits;
        a *= (10 ** addzeroes)
    if (a == b):
        return "=";
    elif (a > b):
        return ">";
    else:
        return "<";
 
# Driver Code
a = 20
z1 = 2;
b = 200
z2 = 1;
ans = CompareNumbers(a, b, z1, z2);
print("A " + ans + " B");
 
# This code is contributed by gfgking

C#

// C# program for the above approach
using System;
class GFG
{
   
// Function to compare 2 numbers A and B
static string CompareNumbers(int a, int b,
                      int z1, int z2)
{
 
    // Calculate number of digits
    // in both the numbers
    int Adigits = 0, Bdigits = 0;
    int tempA = a, tempB = b;
 
    while (tempA != 0) {
        Adigits++;
        tempA /= 10;
    }
    while (tempB != 0) {
        Bdigits++;
        tempB /= 10;
    }
 
    // Now compare both the digits with
    // adding zeroes
    if (Adigits + z1 > Bdigits + z2) {
        return ">";
    }
    else if (Adigits + z1 < Bdigits + z2) {
        return "<";
    }
 
    // If both condition are not true means
    // they have equal digits So now add zeroes
    // in smaller digit number to make equal
    // digits number as larger
 
    if (Adigits > Bdigits) {
        int addzeroes = Adigits - Bdigits;
        b *= (int)Math.Pow(10, addzeroes);
    }
    else {
        int addzeroes = Bdigits - Adigits;
        a *= (int)Math.Pow(10, addzeroes);
    }
    if (a == b) {
        return "=";
    }
    else if (a > b) {
        return ">";
    }
    else {
        return "<";
    }
}
 
// Driver Code
public static void Main()
{
 
    int a = 20, z1 = 2;
    int b = 200, z2 = 1;
    string ans = CompareNumbers(a, b, z1, z2);
    Console.Write("A " + ans + " B");
}
}
 
// This code is contributed by Samim Hossain Mondal.

Javascript

<script>
        // JavaScript code for the above approach
 
        // Function to compare 2 numbers A and B
        function CompareNumbers(a, b, z1, z2)
        {
 
            // Calculate number of digits
            // in both the numbers
            let Adigits = 0, Bdigits = 0;
            let tempA = a, tempB = b;
 
            while (tempA != 0)
            {
                Adigits++;
                tempA = Math.floor(tempA / 10);
            }
            while (tempB != 0)
            {
                Bdigits++;
                tempB = Math.floor(tempB / 10);
            }
 
            // Now compare both the digits with
            // adding zeroes
            if (Adigits + z1 > Bdigits + z2)
            {
                return ">";
            }
            else if (Adigits + z1 < Bdigits + z2)
            {
                return "<";
            }
 
            // If both condition are not true means
            // they have equal digits So now add zeroes
            // in smaller digit number to make equal
            // digits number as larger
            if (Adigits > Bdigits)
            {
                let addzeroes = Adigits - Bdigits;
                b *= Math.pow(10, addzeroes);
            }
            else
            {
                let addzeroes = Bdigits - Adigits;
                a *= Math.pow(10, addzeroes);
            }
            if (a == b)
            {
                return "=";
            }
            else if (a > b)
            {
                return ">";
            }
            else
            {
                return "<";
            }
        }
 
        // Driver Code
        let a = 20, z1 = 2;
        let b = 200, z2 = 1;
        let ans = CompareNumbers(a, b, z1, z2);
        document.write("A " + ans + " B");
 
         // This code is contributed by Potta Lokesh
    </script>
Producción

A = B

Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

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