URI Online Judge | 1022
Timelimit: 1
TDA Racional
Por Neilor Tonin, URI
Brasil
Brasil
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)
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 N (1 ≤ N ≤ 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 X (1 ≤ X ≤ 1000), uma operação (-, +, * ou /) e outro valor racional Y (1 ≤ Y ≤ 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));
}
}
}
}
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