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>
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