Skip to content
Related Articles
Find max of two Rational numbers
• Difficulty Level : Hard
• Last Updated : 03 Feb, 2020

Given two Rational numbers, the task is to find the maximum of given two rational numbers.

Examples :

```Input : first = 3/4, second= 3/2
Output : 3/2

Input : first = 100/100, second = 300/400
Output : 100/100
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

A simple solution is to find float values and compare the float values. The float computations may cause precision errors. We can avoid them using below approach.

Say first = 3/2, second = 3/4

• First take a LCM of (4, 2) which is denominator of rational number. so the LCM of this is 4, then divide with both denominator and multiple with numerator of first and second respectively so the denominator value is first numerator = 6, second numerator = 3.
• Then find the max between these two. so here first numerator is max then print first rational number.

## C++

 `// CPP program to find max between``// two Rational numbers``#include ``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`

Output :

```3/2
```

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up