URI-1022 Solve

TDA Rational

By Neilor Tonin, URI  Brazil
Timelimit: 1
You were invited to do a little job for your Mathematic teacher. The job is to read a Mathematic expression in format of two rational numbers (numerator / denominator) and present the result of the operation. Each operand or operator is separated by a blank space. The input sequence (each line) must respect the following format: number, (‘/’ char), number, operation char (‘/’, ‘*’, ‘+’, ‘-‘), number, (‘/’ char), number. The answer must be presented followed by ‘=’ operator and the simplified answer. If the answer can’t be simplified, it must be repeated after a ‘=’ operator.
Considering N1 and D1 as numerator and denominator of the first fraction, follow the orientation about how to do each one of these 4 operations:
Sum: (N1*D2 + N2*D1) / (D1*D2)
Subtraction: (N1*D2 - N2*D1) / (D1*D2)
Multiplication: (N1*N2) / (D1*D2)
Division: (N1/D1) / (N2/D2), that means (N1*D2)/(N2*D1)

Input

The input contains several cases of test. The first value is an integer (1 ≤ ≤ 1*104), indicating the amount of cases of test that must be read. Each case of test contains a rational value (1 ≤ ≤ 1000), an operation (-, +, * or /) and another rational value (1 ≤ ≤ 1000).

Output

The output must be a rational number, followed by a “=“ sign and another rational number, that is the simplification of the first value. In case of the first value can’t be simplified, the same value must be repeated after the ‘=’ sign.
Input SampleOutput Sample
4
1 / 2 + 3 / 4
1 / 2 - 3 / 4
2 / 3 * 6 / 6
1 / 2 / 3 / 4
10/8 = 5/4
-2/8 = -1/4
12/18 = 2/3
4/6 = 2/3

Problem link: https://www.urionlinejudge.com.br/judge/en/problems/view/1022

Solution:

  • [tab]
    • C++
      • #include <cstdio>
        using namespace std;
        
        int euclides(int a, int b)
        {
         int divisor, dividendo, c;
        
         if(a == 0)
          return 1;
        
         if(b > a){
          dividendo = b;
          divisor = a;
         }else{
          dividendo = a;
          divisor = b;
         }
        
         while(dividendo % divisor != 0)
         {
          c = dividendo % divisor;
          dividendo = divisor;
          divisor = c;
         }
         return divisor;
        }
        
        int main()
        {
         char c1, c2, c3;
         int n, N1, N2, D1, D2, num, den, numS, denS, e;
         scanf("%i", &n);
        
         for (int i = 0; i < n; ++i)
         {
          scanf("%i %c %i %c %i %c %i", &N1, &c1, &D1, &c2, &N2, &c3, &D2);
          if(c2 == '+'){
           num = ((N1 * D2) + (N2 * D1));
           den = (D1 * D2);
          }else if(c2 == '-'){
           num = ((N1 * D2) - (N2 * D1));
           den = (D1 * D2);
          }else if(c2 == '*'){
           num = (N1 * N2);
           den = (D1 * D2);
          }else{
           num = (N1 * D2);
           den = (N2 * D1);
          }
        
          e = euclides(num, den);
          numS = num / e; 
          denS = den / e;
        
          if(numS > 0 && denS > 0){
           printf("%i/%i = %i/%i\n", num, den, numS, denS);
          }else{
           if(denS < 0){
            denS = -denS;
            numS = -numS;
           }
           printf("%i/%i = %i/%i\n", num, den, numS, denS);
          }
         }
        
         return 0;
        }
3/Technology/post-list
Name

Codeforces,53,Problem Solve,90,Programming Tricks,1,URI,37,
ltr
item
DorHubs: URI-1022 Solve
URI-1022 Solve
DorHubs
https://dorhubs.blogspot.com/2019/08/uri-1022-solve.html
https://dorhubs.blogspot.com/
https://dorhubs.blogspot.com/
https://dorhubs.blogspot.com/2019/08/uri-1022-solve.html
true
9087637800571592252
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy