Python 3 | Math, Simulation, GCD | Explanation
Explanation\n- Intuition: Simulation seems like a fine solution, with basic Math, it should be straight forward.\n- Simulation the following process:\n\t- Find 
### Explanation\n- Intuition: Simulation seems like a fine solution, with basic Math, it should be straight forward.\n- Simulation the following process:\n\t- Find each (numerator, divisor) in `expression`, calculate the product of all divisors and store at `multiple`\n\t- Calculate new numerator which is the sum of `numerator * multiple // divisor` named as `s`, and new divisor is now becomes to `multiple`\n\t- Find `greatest common divisor (GCD)`, which is `divisor`, between new numerator (`s`) and new divisor (`multiple`)\n\t- Divide both `s` and `multiple` by `divisor` and return the final faction\n### Implementation\n```\nclass Solution:\n    def fractionAddition(self, expression: str) -> str:\n        pairs, cur, sign, multiple = [], \'\', 0, 1\n        for c in expression+\'+\':\n            if not sign:\n                if c == \'-\': sign = -1\n                else: sign, cur = 1, cur + c\n            elif c in \'-+\':\n                left, right = cur.split(\'/\')\n                pairs.append((abs(int(left)) * sign, abs(int(right))))\n                multiple *= pairs[-1][1]\n                sign, cur = -1 if c == \'-\' else 1, \'\'\n            else: cur += c\n        s = sum([n * multiple // d for n, d in pairs])\n        def gcd(a, b):\n            while b: a, b = b, a % b\n            return abs(a)                \n        divisor = gcd(s, multiple)\n        return f\'{s//divisor}/{multiple//divisor}\'\n```
['Math', 'String', 'Simulation', 'Python', 'Python3']