-
Notifications
You must be signed in to change notification settings - Fork 127
/
TDARacional.kt
112 lines (96 loc) · 3.03 KB
/
TDARacional.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// TDA Racional
/*
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 contém vários casos de teste. A primeira linha de cada caso de teste
contém 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
fun maximoDivisorComum(a: Int, b: Int): Int {
return if (b == 0) a else maximoDivisorComum(b, a % b)
}
fun main() {
val lista = mutableListOf<String>()
val scan = Scanner(System.`in`)
var n1: Int
var d1: Int
var n2: Int
var d2: Int
var nf: Int
var df: Int
var aux: String
var mdc:Int
val n: Int = scan.nextInt()
for (i in 1..n) {
n1 = scan.nextInt()
scan.next()
d1 = scan.nextInt()
aux = scan.next()
n2 = scan.nextInt()
scan.next()
d2 = scan.nextInt()
when (aux) {
"+" -> {
nf = (n1 * d2) + (n2 * d1)
df = d1 * d2
mdc = maximoDivisorComum(nf, df)
if (mdc < 0){
mdc *= -1
}
lista.add("$nf/$df = ${nf/mdc}/${df/mdc}")
}
"-" -> {
nf = (n1 * d2) - (n2 * d1)
df = d1 * d2
mdc = maximoDivisorComum(nf, df)
if (mdc < 0){
mdc *= -1
}
lista.add("$nf/$df = ${nf/mdc}/${df/mdc}")
}
"*" -> {
nf = n1 * n2
df = d1 * d2
mdc = maximoDivisorComum(nf, df)
if (mdc < 0){
mdc *= -1
}
lista.add("$nf/$df = ${nf/mdc}/${df/mdc}")
}
"/" -> {
nf = n1 * d2
df = d1 * n2
mdc = maximoDivisorComum(nf, df)
if (mdc < 0){
mdc *= -1
}
lista.add("$nf/$df = ${nf/mdc}/${df/mdc}")
}
}
}
lista.forEach {
println(it)
}
}