Encuentra el máximo de dos números racionales

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

Deja una respuesta

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