Program to compare two fractions
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