Plataforma: URI
Problema: 1022
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 <stdio.h> 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; scanf("%d", &n); while (n--) { scanf("%d %c %d %c %d %c %d", &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); printf("%d/%d = %d/%d\n", numFinal, denFinal, numFinal/menor, (!numFinal? 1 : denFinal/menor)); } return 0; }
Nenhum comentário:
Postar um comentário