Program to compare two fractions

Last Updated : 20 May, 2026

Given a string s containing two fractions a/b and c/d, compare them and return the greater. If they are equal, then return "equal".

Note: The string s contains "a/b, c/d"(fractions are separated by comma(,) & space( )). 

Examples :  

Input: s = "5/6, 11/45"
Output: 5/6
Explanation: 5/6=0.8333 and 11/45=0.2444, So 5/6 is a greater fraction.

Input: s= "8/1, 8/1"
Output: equal
Explanation: We can see that both the fractions are same, so we'll return a string "equal".

Try It Yourself
redirect icon

[Naive Approach] Using Floating Point Division - O(1) Time O(1) Space

The idea is to convert both fractions into decimal values and compare them.

C++
#include <iostream>
using namespace std;

// Function to compare two fractions
string compareFrac(string &s)
{

    // Finding position of comma
    int commaPos = s.find(',');

    // Extracting both fractions
    string s1 = s.substr(0, commaPos);
    string s2 = s.substr(commaPos + 2);

    // Finding position of '/'
    int slash1 = s1.find('/');
    int slash2 = s2.find('/');

    // Extracting numerator and denominator
    int a = stoi(s1.substr(0, slash1));
    int b = stoi(s1.substr(slash1 + 1));

    int c = stoi(s2.substr(0, slash2));
    int d = stoi(s2.substr(slash2 + 1));

    // Converting fractions into decimal values
    double val1 = (double)a / b;
    double val2 = (double)c / d;

    // Comparing decimal values
    if (val1 > val2)
        return s1;

    if (val2 > val1)
        return s2;

    return "equal";
}

// Driver Code
int main()
{

    string s = "5/6, 11/45";

    cout << compareFrac(s);

    return 0;
}
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Function to compare two fractions
char* compareFrac(char* s)
{
    // Finding position of comma
    char* commaPos = strchr(s, ',');

    // Extracting both fractions
    char s1[50];
    char s2[50];

    strncpy(s1, s, commaPos - s);
    s1[commaPos - s] = '\0';

    strcpy(s2, commaPos + 2);

    // Variables for numerator and denominator
    int a, b, c, d;

    // Extracting numerator and denominator
    sscanf(s1, "%d/%d", &a, &b);
    sscanf(s2, "%d/%d", &c, &d);

    // Converting fractions into decimal values
    double val1 = (double)a / b;
    double val2 = (double)c / d;

    // Comparing decimal values
    if (val1 > val2)
        return strdup(s1);

    if (val2 > val1)
        return strdup(s2);

    return strdup("equal");
}

// Driver Code
int main()
{
    char s[] = "5/6, 11/45";

    printf("%s", compareFrac(s));

    return 0;
}
Java
import java.util.*;

public class GfG {
    // Function to compare two fractions
    public static String compareFrac(String s) {
        // Finding position of comma
        int commaPos = s.indexOf(',');

        // Extracting both fractions
        String s1 = s.substring(0, commaPos);
        String s2 = s.substring(commaPos + 2);

        // Finding position of '/'
        int slash1 = s1.indexOf('/');
        int slash2 = s2.indexOf('/');

        // Extracting numerator and denominator
        int a = Integer.parseInt(s1.substring(0, slash1));
        int b = Integer.parseInt(s1.substring(slash1 + 1));

        int c = Integer.parseInt(s2.substring(0, slash2));
        int d = Integer.parseInt(s2.substring(slash2 + 1));

        // Converting fractions into decimal values
        double val1 = (double)a / b;
        double val2 = (double)c / d;

        // Comparing decimal values
        if (val1 > val2)
            return s1;

        if (val2 > val1)
            return s2;

        return "equal";
    }

    // Driver Code
    public static void main(String[] args) {
        String s = "5/6, 11/45";
        System.out.println(compareFrac(s));
    }
}
Python
def compareFrac(s):
    
    # Finding position of comma
    commaPos = s.find(',')

    # Extracting both fractions
    s1 = s[:commaPos]
    s2 = s[commaPos + 2:]

    # Finding position of '/'
    slash1 = s1.find('/')
    slash2 = s2.find('/')

    # Extracting numerator and denominator
    a = int(s1[:slash1])
    b = int(s1[slash1 + 1:])

    c = int(s2[:slash2])
    d = int(s2[slash2 + 1:])

    # Converting fractions into decimal values
    val1 = a / b
    val2 = c / d

    # Comparing decimal values
    if val1 > val2:
        return s1

    if val2 > val1:
        return s2

    return "equal"


# Driver Code
if __name__ == "__main__":

    s = "5/6, 11/45"

    print(compareFrac(s))
C#
using System;

class GfG {
    // Function to compare two fractions
    public static string compareFrac(string s) {
        // Finding position of comma
        int commaPos = s.IndexOf(',');

        // Extracting both fractions
        string s1 = s.Substring(0, commaPos);
        string s2 = s.Substring(commaPos + 2);

        // Finding position of '/'
        int slash1 = s1.IndexOf('/');
        int slash2 = s2.IndexOf('/');

        // Extracting numerator and denominator
        int a = int.Parse(s1.Substring(0, slash1));
        int b = int.Parse(s1.Substring(slash1 + 1));

        int c = int.Parse(s2.Substring(0, slash2));
        int d = int.Parse(s2.Substring(slash2 + 1));

        // Converting fractions into decimal values
        double val1 = (double)a / b;
        double val2 = (double)c / d;

        // Comparing decimal values
        if (val1 > val2)
            return s1;

        if (val2 > val1)
            return s2;

        return "equal";
    }

    // Driver Code
    public static void Main() {
        string s = "5/6, 11/45";
        Console.WriteLine(compareFrac(s));
    }
}
JavaScript
// Function to compare two fractions
function compareFrac(s) {
    // Finding position of comma
    let commaPos = s.indexOf(',');

    // Extracting both fractions
    let s1 = s.substring(0, commaPos);
    let s2 = s.substring(commaPos + 2);

    // Finding position of '/'
    let slash1 = s1.indexOf('/');
    let slash2 = s2.indexOf('/');

    // Extracting numerator and denominator
    let a = parseInt(s1.substring(0, slash1));
    let b = parseInt(s1.substring(slash1 + 1));

    let c = parseInt(s2.substring(0, slash2));
    let d = parseInt(s2.substring(slash2 + 1));

    // Converting fractions into decimal values
    let val1 = a / b;
    let val2 = c / d;

    // Comparing decimal values
    if (val1 > val2)
        return s1;

    if (val2 > val1)
        return s2;

    return 'equal';
}

// Driver Code
let s = '5/6, 11/45';
console.log(compareFrac(s));

Output
5/6

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

[Expected Approach] Using Cross Multiplication - O(1) Time O(1) Space

The idea is to compare fractions using cross multiplication instead of division.

For two fractions a/b and c/d, compare a * d  and  b * c

  • If a * d > b * c, then the first fraction is greater.
  • If a * d < b * c, then the second fraction is greater.
  • Otherwise, both fractions are equal.
C++
#include <iostream>
using namespace std;

// Function to compare two fractions
string compareFrac(string &s)
{

    // Finding position of comma
    int commaPos = s.find(',');

    // Extracting both fractions
    string s1 = s.substr(0, commaPos);
    string s2 = s.substr(commaPos + 2);

    // Finding position of '/'
    int slash1 = s1.find('/');
    int slash2 = s2.find('/');

    // Extracting numerator and denominator
    int a = stoi(s1.substr(0, slash1));
    int b = stoi(s1.substr(slash1 + 1));

    int c = stoi(s2.substr(0, slash2));
    int d = stoi(s2.substr(slash2 + 1));

    // Cross multiplication
    long long left = 1LL * a * d;
    long long right = 1LL * b * c;

    // Comparing fractions
    if (left > right)
        return s1;

    if (right > left)
        return s2;

    return "equal";
}

// Driver Code
int main()
{

    string s = "5/6, 11/45";

    cout << compareFrac(s);

    return 0;
}
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Function to compare two fractions
char* compareFrac(char* s)
{
    // Finding position of comma
    int commaPos = strchr(s, ',') - s;

    // Extracting both fractions
    char s1[100];
    char s2[100];

    strncpy(s1, s, commaPos);
    s1[commaPos] = '\0';

    strcpy(s2, s + commaPos + 2);

    // Variables for numerator and denominator
    int a, b, c, d;

    // Extracting numerator and denominator
    sscanf(s1, "%d/%d", &a, &b);
    sscanf(s2, "%d/%d", &c, &d);

    // Cross multiplication
    long long left = 1LL * a * d;
    long long right = 1LL * b * c;

    // Comparing fractions
    if (left > right)
        return strdup(s1);

    if (right > left)
        return strdup(s2);

    return strdup("equal");
}

// Driver Code
int main()
{
    char s[] = "5/6, 11/45";

    printf("%s", compareFrac(s));

    return 0;
}
Java
public class GfG {
    // Function to compare two fractions
    public static String compareFrac(String s) {
        // Finding position of comma
        int commaPos = s.indexOf(',');

        // Extracting both fractions
        String s1 = s.substring(0, commaPos);
        String s2 = s.substring(commaPos + 2);

        // Finding position of '/'
        int slash1 = s1.indexOf('/');
        int slash2 = s2.indexOf('/');

        // Extracting numerator and denominator
        int a = Integer.parseInt(s1.substring(0, slash1));
        int b = Integer.parseInt(s1.substring(slash1 + 1));

        int c = Integer.parseInt(s2.substring(0, slash2));
        int d = Integer.parseInt(s2.substring(slash2 + 1));

        // Cross multiplication
        long left = 1L * a * d;
        long right = 1L * b * c;

        // Comparing fractions
        if (left > right)
            return s1;
        if (right > left)
            return s2;
        return "equal";
    }

    // Driver Code
    public static void main(String[] args) {
        String s = "5/6, 11/45";
        System.out.println(compareFrac(s));
    }
}
Python
def compareFrac(s):
    # Finding position of comma
    commaPos = s.find(',')

    # Extracting both fractions
    s1 = s[:commaPos]
    s2 = s[commaPos + 2:]

    # Finding position of '/'
    slash1 = s1.find('/')
    slash2 = s2.find('/')

    # Extracting numerator and denominator
    a = int(s1[:slash1])
    b = int(s1[slash1 + 1:])

    c = int(s2[:slash2])
    d = int(s2[slash2 + 1:])

    # Cross multiplication
    left = a * d
    right = b * c

    # Comparing fractions
    if left > right:
        return s1
    if right > left:
        return s2
    return 'equal'

# Driver Code
if __name__ == "__main__":

    s = "5/6, 11/45"

    print(compareFrac(s))
C#
using System;

class GfG {
    // Function to compare two fractions
    public static string compareFrac(string s) {
        // Finding position of comma
        int commaPos = s.IndexOf(',');

        // Extracting both fractions
        string s1 = s.Substring(0, commaPos);
        string s2 = s.Substring(commaPos + 2);

        // Finding position of '/'
        int slash1 = s1.IndexOf('/');
        int slash2 = s2.IndexOf('/');

        // Extracting numerator and denominator
        int a = int.Parse(s1.Substring(0, slash1));
        int b = int.Parse(s1.Substring(slash1 + 1));

        int c = int.Parse(s2.Substring(0, slash2));
        int d = int.Parse(s2.Substring(slash2 + 1));

        // Cross multiplication
        long left = 1L * a * d;
        long right = 1L * b * c;

        // Comparing fractions
        if (left > right)
            return s1;
        if (right > left)
            return s2;
        return "equal";
    }

    // Driver Code
    public static void Main() {
        string s = "5/6, 11/45";
        Console.WriteLine(compareFrac(s));
    }
}
JavaScript
function compareFrac(s) {
    // Finding position of comma
    let commaPos = s.indexOf(',');

    // Extracting both fractions
    let s1 = s.substring(0, commaPos);
    let s2 = s.substring(commaPos + 2);

    // Finding position of '/'
    let slash1 = s1.indexOf('/');
    let slash2 = s2.indexOf('/');

    // Extracting numerator and denominator
    let a = parseInt(s1.substring(0, slash1));
    let b = parseInt(s1.substring(slash1 + 1));

    let c = parseInt(s2.substring(0, slash2));
    let d = parseInt(s2.substring(slash2 + 1));

    // Cross multiplication
    let left = BigInt(a) * BigInt(d);
    let right = BigInt(b) * BigInt(c);

    // Comparing fractions
    if (left > right)
        return s1;
    if (right > left)
        return s2;
    return 'equal';
}

// Driver Code
let s = '5/6, 11/45';
console.log(compareFrac(s));

Output
5/6

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

Comment