Pesquisar este blog

Livros Recomendados

sábado, 26 de dezembro de 2020

URI - 1022 - Estruturas e Bibliotecas - TDA Racional - C++

Plataforma: URI

Problema1022

Enunciado:

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)

Linguagem: C++

Solução:

#include <iostream>
using namespace std;
int mdc(int x, int y) {
    if (x < y) {
        int troca = y;
        y = x;
        x = troca;
    }
    if (x % y == 0)
        return y;
    return mdc(y, x % y);
}
int main() {
    int n, num1, den1, num2, den2, numFinal, denFinal, menor;
    char op1, op2, op3;
    cin >> n;
    while (n--) {
        cin >> num1 >> op1 >> den1 >> op2 >> num2 >> op3 >> den2;
        switch (op2) {
            case '+':
                numFinal = den2*num1 + den1*num2;
                denFinal = den1*den2;
                break;
            case '-':
                numFinal = den2*num1 - den1*num2;
                denFinal = den1*den2;
                break;
            case '*':
                numFinal = num1*num2;
                denFinal = den1*den2;
                break;
            default:
                numFinal = num1*den2;
                denFinal = num2*den1;
                break;
        }
        menor = mdc((numFinal < 0? -numFinal : numFinal), denFinal);
        cout << numFinal << "/" << denFinal << " = " << numFinal/menor << "/" << (!numFinal? 1 : denFinal/menor) << endl;
    }
    return 0;
}

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas