Dados dos números racionales, la tarea es encontrar el máximo de dos números racionales dados.
Ejemplos:
Input : first = 3/4, second= 3/2 Output : 3/2 Input : first = 100/100, second = 300/400 Output : 100/100
Una solución simple es encontrar valores flotantes y comparar los valores flotantes. Los cálculos de flotación pueden causar errores de precisión. Podemos evitarlos usando el siguiente enfoque.
Di primero = 3/2, segundo = 3/4
- Primero toma un MCM de (4, 2) que es el denominador de un número racional. entonces el MCM de esto es 4, luego se divide con el denominador y el múltiplo con el numerador del primero y el segundo respectivamente, de modo que el valor del denominador sea el primer numerador = 6, el segundo numerador = 3.
- Luego encuentre el máximo entre estos dos. así que aquí el primer numerador es máximo y luego imprime el primer número racional.
C++
// CPP program to find max between // two Rational numbers #include <bits/stdc++.h> using namespace std; struct Rational { int nume, deno; }; // Get lcm of two number's int lcm(int a, int b) { return (a * b) / (__gcd(a, b)); } // Get max rational number Rational maxRational(Rational first, Rational sec) { // Find the LCM of first->denominator // and sec->denominator int k = lcm(first.deno, sec.deno); // Declare nume1 and nume2 for get the value of // first numerator and second numerator int nume1 = first.nume; int nume2 = sec.nume; nume1 *= k / (first.deno); nume2 *= k / (sec.deno); return (nume2 < nume1)? first : sec; } // Driver Code int main() { Rational first = { 3, 2 }; Rational sec = { 3, 4 }; Rational res = maxRational(first, sec); cout << res.nume << "/" << res.deno; return 0; }
Java
// JAVA program to find max between // two Rational numbers class GFG { static class Rational { int nume, deno; public Rational(int nume, int deno) { this.nume = nume; this.deno = deno; } }; // Get lcm of two number's static int lcm(int a, int b) { return (a * b) / (__gcd(a, b)); } // Get max rational number static Rational maxRational(Rational first, Rational sec) { // Find the LCM of first.denominator // and sec.denominator int k = lcm(first.deno, sec.deno); // Declare nume1 and nume2 for get the value of // first numerator and second numerator int nume1 = first.nume; int nume2 = sec.nume; nume1 *= k / (first.deno); nume2 *= k / (sec.deno); return (nume2 < nume1)? first : sec; } static int __gcd(int a, int b) { return b == 0 ? a:__gcd(b, a % b); } // Driver Code public static void main(String[] args) { Rational first = new Rational(3, 2 ); Rational sec = new Rational(3, 4 ); Rational res = maxRational(first, sec); System.out.print(res.nume+ "/" + res.deno); } } // This code is contributed by Rajput-Ji
Python
# Python program to find max between # two Rational numbers import math # Get lcm of two number's def lcm(a, b): return (a * b) // (math.gcd(a, b)) # Get max rational number def maxRational(first, sec): # Find the LCM of first->denominator # and sec->denominator k = lcm(first[1], sec[1]) # Declare nume1 and nume2 for get the value of # first numerator and second numerator nume1 = first[0] nume2 = sec[0] nume1 *= k // (first[1]) nume2 *= k // (sec[1]) return first if (nume2 < nume1) else sec # Driver Code first = [3, 2] sec = [3, 4] res = maxRational(first, sec) print(res[0], "/", res[1], sep = "") # This code is contributed by SHUBHAMSINGH10
C#
// C# program to find max between // two Rational numbers using System; class GFG { class Rational { public int nume, deno; public Rational(int nume, int deno) { this.nume = nume; this.deno = deno; } }; // Get lcm of two number's static int lcm(int a, int b) { return (a * b) / (__gcd(a, b)); } // Get max rational number static Rational maxRational(Rational first, Rational sec) { // Find the LCM of first.denominator // and sec.denominator int k = lcm(first.deno, sec.deno); // Declare nume1 and nume2 for get the value of // first numerator and second numerator int nume1 = first.nume; int nume2 = sec.nume; nume1 *= k / (first.deno); nume2 *= k / (sec.deno); return (nume2 < nume1)? first : sec; } static int __gcd(int a, int b) { return b == 0 ? a:__gcd(b, a % b); } // Driver Code public static void Main(String[] args) { Rational first = new Rational(3, 2); Rational sec = new Rational(3, 4); Rational res = maxRational(first, sec); Console.Write(res.nume + "/" + res.deno); } } // This code is contributed by 29AjayKumar
Javascript
<script> // JAVASCRIPT program to find max between // two Rational numbers class Rational { constructor(nume,deno) { this.nume = nume; this.deno = deno; } } // Get lcm of two number's function lcm(a,b) { return (a * b) / (__gcd(a, b)); } // Get max rational number function maxRational(first,sec) { // Find the LCM of first.denominator // and sec.denominator let k = lcm(first.deno, sec.deno); // Declare nume1 and nume2 for get the value of // first numerator and second numerator let nume1 = first.nume; let nume2 = sec.nume; nume1 *= k / (first.deno); nume2 *= k / (sec.deno); return (nume2 < nume1)? first : sec; } function __gcd(a,b) { return b == 0 ? a:__gcd(b, a % b); } // Driver Code let first = new Rational(3, 2 ); let sec = new Rational(3, 4 ); let res = maxRational(first, sec); document.write(res.nume+ "/" + res.deno); // This code is contributed by rag2127 </script>
Producción :
3/2
Complejidad de tiempo: O(log(max(deno,nume)))
Espacio auxiliar: O(1)
Sugiera si alguien tiene una mejor solución que sea más eficiente en términos de espacio y tiempo.
Este artículo es una contribución de Aarti_Rathi . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por DevanshuAgarwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA