quarta-feira, 24 de outubro de 2018

URI PROBLEMA 1022 - TDA Racional SOLUÇÃO EM JAVA

URI Online Judge | 1022

TDA Racional

Por Neilor Tonin, URI  Brasil
Timelimit: 1
A tarefa aqui neste problema é ler uma expressão matemática na forma de dois números Racionais (numerador / denominador) e apresentar o resultado da operação. Cada operando ou operador é separado por um espaço em branco. A sequência de cada linha que contém a expressão a ser lida é: número, caractere, número, caractere, número, caractere, número. A resposta deverá ser apresentada e posteriormente simplificada. Deverá então ser apresentado o sinal de igualdade e em seguida a resposta simplificada. No caso de não ser possível uma simplificação, deve ser apresentada a mesma resposta após o sinal de igualdade.
Considerando N1 e D1 como numerador e denominador da primeira fração, segue a orientação de como deverá ser realizada cada uma das operações:
Soma: (N1*D2 + N2*D1) / (D1*D2)
Subtração: (N1*D2 - N2*D1) / (D1*D2)
Multiplicação: (N1*N2) / (D1*D2)
Divisão: (N1/D1) / (N2/D2), ou seja (N1*D2)/(N2*D1)

Entrada

A entrada contem vários casos de teste. A primeira linha de cada caso de teste contem um inteiro (1 ≤ ≤ 1*104), indicando a quantidade de casos de teste que devem ser lidos logo a seguir. Cada caso de teste contém um valor racional (1 ≤ ≤ 1000), uma operação (-, +, * ou /) e outro valor racional (1 ≤ ≤ 1000).

Saída

A saída consiste em um valor racional, seguido de um sinal de igualdade e outro valor racional, que é a simplificação do primeiro valor. No caso do primeiro valor não poder ser simplificado, o mesmo deve ser repetido após o sinal de igualdade.



import java.util.Scanner;

public class Main{
    static int mdc(int a, int b){
        if(b == 0)
            return a;
        else
            return mdc(b, a%b);
    }

    public static void main(String[] args){
        //cria o objeto bufferedreader
        Scanner scan = new Scanner(System.in);
        //criação de variaveis
        int c = scan.nextInt(), n1, d1, n2, d2, num, den, simp;
        char op;
        //while para executar os c casos
        while(c-- > 0){
            //lê as frações e a operação
            n1 = scan.nextInt();
            scan.next();
            d1 = scan.nextInt();
            op = scan.next().charAt(0);
            n2 = scan.nextInt();
            scan.next();
            d2 = scan.nextInt();
            //realiza a operação
            if(op == '+'){
                num = n1 * d2 + n2 * d1;
                den = d1 * d2;
                simp = mdc(num, den); //calcula o mdc para simpificar
                if(simp < 0)
                    simp *= -1;               
                System.out.println(num + "/" + den + " = " + (num / simp) + "/" + (den / simp));
            }else if(op == '-'){
                num = n1 * d2 - n2 * d1;
                den = d1 * d2;
                simp = mdc(num, den); //calcula o mdc para simpificar
                if(simp < 0)
                    simp *= -1;
                System.out.println(num + "/" + den + " = " + (num / simp) + "/" + (den / simp));
            }else if(op == '*'){
                num = n1 * n2;
                den = d1 * d2;
                simp = mdc(num, den); //calcula o mdc para simpificar
                if(simp < 0)
                    simp *= -1;
                System.out.println(num + "/" + den + " = " + (num / simp) + "/" + (den / simp));
            }else if(op == '/'){
                num = n1 * d2;
                den = n2 * d1;
                simp = mdc(num, den); //calcula o mdc para simpificar
                if(simp < 0)
                    simp *= -1;
                System.out.println(num + "/" + den + " = " + (num / simp) + "/" + (den / simp));
            }
        }
    }
}

Nenhum comentário:

Postar um comentário

URI PROBLEMA 1133 - Resto da Divisão SOLUÇÃO EM C

URI Online Judge | 1133 Resto da Divisão Adaptado por Neilor Tonin, URI   Brasil Timelimit: 1 Escreva um programa que leia 2 valo...