Open In App

Program to compare two fractions

Last Updated : 06 Aug, 2024
Summarize
Comments
Improve
Suggest changes
Share
Like Article
Like
Report

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)
{
    
    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.
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]);
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.
?>

Output
3/2

Time Complexity: O(1)
Auxiliary Space: O(1)
 


Next Article
Article Tags :

Similar Reads