int x = 5;
int y = 2;
if(x%y != 0){
System.out.println(x+ "/" +y);
}else{
System.out.println(x/y);
}
Tenho esse algoritmo acima para me retornar o número em forma de fração caso seu quociente não seja um número inteiro.
Gostaria de saber qual seria a lógica, para somar esse número em forma de fração, com outro fracionado ou não e o resultado continuar em forma de fração. Ou seja, 1/2 + 1 = 3/2.
Para que seja possível construir um algoritmo, antes de mais nada, é necessário saber como as coisas funcionam.
Portanto, dá uma olhada aqui
Nunca tinha parado pra pensar nesse problema, achei interessante o suficiente para tentar fazer algo aqui. Depois de dar uma revisada em frações, cheguei nisso aqui:
class Main {
public static void main(String[] args) {
Fracao f1 = new Fracao(2, 2);
Fracao f2 = new Fracao(-2, 4);
System.out.println(f1.mais(f2).simplificada());
}
}
class Fracao {
private final long numerador;
private final long denominador;
public Fracao(final long numerador, final long denominador) {
if (denominador == 0l)
throw new IllegalArgumentException("Denominador não pode ser igual a zero.");
this.numerador = numerador;
this.denominador = denominador;
}
public Fracao mais(Fracao outraFracao) {
final long novoDenominador = lcm(denominador, outraFracao.denominador);
final long novoNumerador = this.encontraNovoNumerador(novoDenominador) + outraFracao.encontraNovoNumerador(novoDenominador);
return new Fracao(novoNumerador, novoDenominador);
}
public Fracao simplificada() {
long gcd = gcd(numerador, denominador);
return new Fracao(numerador / gcd, denominador / gcd);
}
private long encontraNovoNumerador(long novoDenominador) {
return novoDenominador / denominador * numerador;
}
private static long lcm(long a, long b) {
return a / gcd(a, b) * b;
}
private static long gcd(long a, long b) {
while (b != 0) {
long temp = b;
b = a % b;
a = temp;
}
return a;
}
@Override
public String toString() {
return numerador + "/" + denominador;
}
}