Código de Roger Benet, comentários de Rogério Júnior
A primeira coisa a fazermos é calcular o valor de . Para colocarmos toda a equação em uma mesma base, multiplicaremos o numerador e o denominador da primeira fração pela base da segunda, , e faremos o mesmo na segunda, com a base da primeira, . Agora, o valor que queremos calcular é:
=
Apesar de termos encontrado uma fração que tem o valor da responta, não podemos imprimir os valores de seu numerador e denominador pois ela pode não estar em sua forma irredutível. Para que cheguemos nessa forma, precisamos eliminar todos os divisores comuns entre numerador e denominador, e fazemos isso dividindo ambos os números pelo MDC entre eles.
O cálculo do MDC entre dois números é uma tarefa simples que todo programador deve conhecer: o Algoritmo de Euclides. Vamos declarar a função int gcd(int x, int y) que calcula o valor de MDC(x,y). Para garantirmos que y é o maior número, trocaremos os valores de x e y (podemos usar o swap) se y<x. Se y for múltiplo de x, então MDC(x,y)=y, logo, retornamos y. Caso contrário, MDC(x,y) será o MDC entre x e o resto que y deixa na divisão por x ("return gcd(x, y%x);").
Segue a adaptação do código do nosso leitor Roger Benet como solução ao problema proposto: