Program to add two fractions
Last Updated :
21 Mar, 2025
Improve
Try it on GfG Practice
Given two integer arrays a[] and b[] containing two integers each representing the numerator and denominator of a fraction respectively. The task is to find the sum of the two fractions and return the numerator and denominator of the result.
Examples :
Input: a = [1, 2] , b = [3, 2]
Output: [2, 1]
Explanation: 1/2 + 3/2 = 2/1Input: a = [1, 3] , b = [3, 9]
Output: [2, 3]
Explanation: 1/3 + 3/9 = 2/3Input: a = [1, 5] , b = [3, 15]
Output: [2, 5]
Explanation: 1/5 + 3/15 = 2/5
Algorithm to Add Two Fractions
- Find a common denominator by finding the LCM (Least Common Multiple) of the two denominators.
- Change the fractions to have the same denominator and add both terms.
- Reduce the final fraction obtained into its simpler form by dividing both the numerator and denominator by their largest common factor.
#include<bits/stdc++.h>
using namespace std;
// Function to find gcd of a and b
int gcd(int n1, int n2)
{
if (n1 == 0)
return n2;
return gcd(n2%n1, n1);
}
//Function to add two fractions
vector<int> addFraction(vector<int> a, vector<int>b)
{
vector<int> ans;
// Finding gcd of den1 and den2
int den = gcd(a[1],b[1]);
// Denominator of final fraction obtained
// finding LCM of den1 and den2
// LCM * GCD = a * b
den = (a[1]*b[1]) / den;
// Changing the fractions to have same denominator
// Numerator of the final fraction obtained
int num = (a[0])*(den/a[1]) + (b[0])*(den/b[1]);
// finding the common factor of numerator and denominator
int common_factor = gcd(num,den);
// Converting the result into simpler
// fraction by dividing them with common factor
den = den/common_factor;
num = num/common_factor;
ans.push_back(num);
ans.push_back(den);
return ans;
}
int main()
{
vector<int> a = {1,2};
vector<int> b = {3,2};
vector<int> ans = addFraction(a, b);
cout<<ans[0]<<", "<<ans[1];
return 0;
}
#include <stdio.h>
// Function to find gcd of a and b
int gcd(int n1, int n2)
{
if (n1 == 0)
return n2;
return gcd(n2 % n1, n1);
}
// Function to add two fractions
void addFraction(int a[], int b[], int result[])
{
// Finding gcd of den1 and den2
int den = gcd(a[1], b[1]);
// Denominator of final fraction obtained
// finding LCM of den1 and den2
// LCM * GCD = a * b
den = (a[1] * b[1]) / den;
// Changing the fractions to have same denominator
// Numerator of the final fraction obtained
int num = (a[0]) * (den / a[1]) + (b[0]) * (den / b[1]);
// finding the common factor of numerator and denominator
int common_factor = gcd(num, den);
// Converting the result into simpler
// fraction by dividing them with common factor
den = den / common_factor;
num = num / common_factor;
result[0] = num;
result[1] = den;
}
int main()
{
int a[] = {1,2};;
int b[] = {3,2};;
int ans[2];
addFraction(a, b, ans);
printf("%d, %d", ans[0], ans[1]);
return 0;
}
import java.util.ArrayList;
import java.util.List;
public class Main {
// Function to find gcd of a and b
public static int gcd(int n1, int n2) {
if (n1 == 0)
return n2;
return gcd(n2 % n1, n1);
}
// Function to add two fractions
public static List<Integer> addFraction(List<Integer> a, List<Integer> b) {
List<Integer> ans = new ArrayList<>();
// Finding gcd of den1 and den2
int den = gcd(a.get(1), b.get(1));
// Denominator of final fraction obtained
// finding LCM of den1 and den2
// LCM * GCD = a * b
den = (a.get(1) * b.get(1)) / den;
// Changing the fractions to have same denominator
// Numerator of the final fraction obtained
int num = (a.get(0)) * (den / a.get(1)) + (b.get(0)) * (den / b.get(1));
// finding the common factor of numerator and denominator
int common_factor = gcd(num, den);
// Converting the result into simpler
// fraction by dividing them with common factor
den = den / common_factor;
num = num / common_factor;
ans.add(num);
ans.add(den);
return ans;
}
public static void main(String[] args) {
List<Integer> a = new ArrayList<>();
a.add(1);
a.add(2);
List<Integer> b = new ArrayList<>();
b.add(3);
b.add(2);
List<Integer> ans = addFraction(a, b);
System.out.println(ans.get(0) + ", " + ans.get(1));
}
}
from math import gcd
# Function to add two fractions
def addFraction(a, b):
# Finding gcd of den1 and den2
den = gcd(a[1], b[1])
# Denominator of final fraction obtained
# finding LCM of den1 and den2
# LCM * GCD = a * b
den = (a[1] * b[1]) // den
# Changing the fractions to have same denominator
# Numerator of the final fraction obtained
num = (a[0]) * (den // a[1]) + (b[0]) * (den // b[1])
# finding the common factor of numerator and denominator
common_factor = gcd(num, den)
# Converting the result into simpler
# fraction by dividing them with common factor
den //= common_factor
num //= common_factor
return [num, den]
if __name__ == '__main__':
a = [1, 2]
b = [3, 2]
ans = addFraction(a, b)
print(f'{ans[0]}, {ans[1]}')
// Function to find gcd of a and b
int gcd(int n1, int n2)
{
if (n1 == 0)
return n2;
return gcd(n2 % n1, n1);
}
// Function to add two fractions
List<int> addFraction(List<int> a, List<int> b)
{
List<int> ans = new List<int>();
// Finding gcd of den1 and den2
int den = gcd(a[1], b[1]);
// Denominator of final fraction obtained
// finding LCM of den1 and den2
// LCM * GCD = a * b
den = (a[1] * b[1]) / den;
// Changing the fractions to have same denominator
// Numerator of the final fraction obtained
int num = (a[0]) * (den / a[1]) + (b[0]) * (den / b[1]);
// finding the common factor of numerator and denominator
int common_factor = gcd(num, den);
// Converting the result into simpler
// fraction by dividing them with common factor
den = den / common_factor;
num = num / common_factor;
ans.Add(num);
ans.Add(den);
return ans;
}
public static void Main()
{
List<int> a = new List<int> {1,2};
List<int> b = new List<int> {3,2};
List<int> ans = addFraction(a, b);
Console.WriteLine(ans[0] + ", " + ans[1]);
}
// Function to find gcd of a and b
function gcd(n1, n2) {
if (n1 === 0)
return n2;
return gcd(n2 % n1, n1);
}
// Function to add two fractions
function addFraction(a, b) {
let ans = [];
// Finding gcd of den1 and den2
let den = gcd(a[1], b[1]);
// Denominator of final fraction obtained
// finding LCM of den1 and den2
// LCM * GCD = a * b
den = (a[1] * b[1]) / den;
// Changing the fractions to have same denominator
// Numerator of the final fraction obtained
let num = (a[0]) * (den / a[1]) + (b[0]) * (den / b[1]);
// finding the common factor of numerator and denominator
let common_factor = gcd(num, den);
// Converting the result into simpler
// fraction by dividing them with common factor
den = den / common_factor;
num = num / common_factor;
ans.push(num);
ans.push(den);
return ans;
}
let a = [1, 2];
let b = [3, 2];
let ans = addFraction(a, b);
console.log(ans[0] + ", " + ans[1]);
Output
2, 1
Time Complexity : O(log(min(a, b))
Auxiliary Space : O(1)