Skip to content
Related Articles

Related Articles

Program to compare two fractions
  • Difficulty Level : Easy
  • Last Updated : 11 May, 2021

Given two fractions a/b and c/d, compare them and print the larger of the two.

Examples :  

Input: 5/6, 11/45
Output: 5/6

Input: 4/5 and 2/3
Output: 4/5 

We can simply convert the fractions into floating-point values by dividing the numerator by the denominator. Once we have the two floating-point numbers corresponding to each fraction, we can compare these numbers and determine which fraction is larger.
However, the computed answer may be incorrect due to floating-point approximations and truncations during the division process. To get the most accurate answer we should avoid resorting to floating-point division.
To compare two fractions we need to make their denominators the same. We can do this by cross-multiplying numerators with denominators. Let’s see how this works 

We have two fractions a/b and c/d.
Let Y = (a/b - c/d) 
      = (ad - bc)/(bd)
Now,
if Y > 0 then a/b > c/d 
if Y = 0 then a/b = c/d
if Y < o then a/b < c/d

Since bd is always positive, the sign of Y depends only on the
numerator (ad-bc). So we need to compute (ad-bc) only.

Complexity : 
Since we perform two multiplication and one subtraction operation, the answer is computed in constant time i.e O(1)
 

C++




// CPP program to find max between
// two Rational numbers
#include <bits/stdc++.h>
using namespace std;
 
struct Fraction {
    int num, den;
};
 
// Get max of the two fractions
Fraction maxFraction(Fraction first, Fraction sec)
{
    // Declare nume1 and nume2 for get the value of
    // first numerator and second numerator
    int a = first.num;
    int b = first.den;
    int c = sec.num;
    int d = sec.den;
 
    // Compute ad-bc
    int Y = a * d - b * c;
 
    return (Y > 0) ? first : sec;
}
 
// Driver Code
int main()
{
    Fraction first = { 3, 2 };
    Fraction sec = { 3, 4 };
 
    Fraction res = maxFraction(first, sec);
    cout << res.num << "/" << res.den;
    return 0;
}

Java




// Java program to find max between
// two Rational numbers
 
import java.io.*;
import java.util.*;
 
class Fraction {
     
 int num, den;
 
//Constructor
Fraction(int n,int d){
    num=n;
    den=d;
}
 
 // Get max of the two fractions
static Fraction maxFraction(Fraction first, Fraction sec)
{
    // Declare nume1 and nume2 for get the value of
    // first numerator and second numerator
    int a = first.num;
    int b = first.den;
    int c = sec.num;
    int d = sec.den;
  
    // Compute ad-bc
    int Y = a * d - b * c;
  
    return (Y > 0) ? first : sec;
}
 
// Driver function
public static void main (String[] args) {
 
   Fraction first = new Fraction( 3, 2 );
   Fraction sec = new Fraction( 3, 4 );
  
    Fraction res = maxFraction(first, sec);
    System.out.println(res.num +"/"+ res.den);
     
}
}
 
// This code is contributed by Gitanjali.

Python3




# Python3 program to find max
# between two Rational numbers
 
# Get max of the two fractions
def maxFraction(first, sec):
     
    # Declare nume1 and nume2 for get the value
    # of first numerator and second numerator
    a = first[0]; b = first[1]
    c = sec[0]; d = sec[1]
 
    # Compute ad-bc
    Y = a * d - b * c
 
    return first if Y else sec
 
# Driver Code
first = ( 3, 2 )
sec = ( 3, 4 )
res = maxFraction(first, sec)
print(str(res[0]) + "/" + str(res[1]))
 
 
# This code is contributed by Ansu Kumari.

C#




// C# program to find max between
// two Rational numbers
using System;
 
class Fraction {
     
    int num, den;
     
    //Constructor
    Fraction(int n,int d)
    {
        num=n;
        den=d;
    }
     
    // Get max of the two fractions
    static Fraction maxFraction(Fraction first, Fraction sec)
    {
        // Declare nume1 and nume2 for get the value of
        // first numerator and second numerator
        int a = first.num;
        int b = first.den;
        int c = sec.num;
        int d = sec.den;
     
        // Compute ad-bc
        int Y = a * d - b * c;
     
        return (Y > 0) ? first : sec;
    }
     
    // Driver function
    public static void Main ()
    {
     
        Fraction first = new Fraction( 3, 2 );
        Fraction sec = new Fraction( 3, 4 );
         
        Fraction res = maxFraction(first, sec);
        Console.WriteLine(res.num +"/"+ res.den);
         
    }
}
 
// This code is contributed by vt_m.

PHP




<?php
// PHP program to find max
// between two Rational numbers
 
// Get max of the two fractions
function maxFraction($first, $sec)
{
     
    // Declare nume1 and nume2
    // for get the value of
    // first numerator and second
    // numerator
    $a = $first[0];
    $b = $first[1];
    $c = $sec[0];
    $d = $sec[1];
 
    // Compute ad-bc
    $Y = $a * $d - $b * $c;
 
    return ($Y) ? $first : $sec;
}
 
// Driver Code
$first = array( 3, 2 );
$sec = array ( 3, 4 );
$res = maxFraction($first, $sec);
echo $res[0] . "/" . $res[1];
 
// This code is contributed
// by mits.
?>

Javascript




// javascript program to find max
// between two Rational numbers
   
// Get max of the two fractions
function maxFraction(first, sec) {
       
    // Declare nume1 and nume2 for get the value
    // of first numerator and second numerator
    a = first[0]; b = first[1]
    c = sec[0]; d = sec[1]
   
    // Compute ad-bc
    Y = a * d - b * c
   
    return (Y > 0) ? first : sec;
 
}
   
// Driver Code
 
first = [ 3, 2 ];
sec = [ 3, 4 ];
res = maxFraction(first, sec);
 
document.write(res[0] + "/" + res[1]);

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
Recommended Articles
Page :