| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | type pair struct {	_1 int	_2 int}func (p1 *pair) add(p2 pair) {	if p1._1 == 0 {		*p1 = p2	} else {		p1._1 = p1._1*p2._2 + p2._1*p1._2		p1._2 *= p2._2	}}func fractionAddition(expression string) string {	beg, end, n := 0, 1, len(expression)	var sum pair	for end < n {		for end = beg + 1; end < n && expression[end] != '+' && expression[end] != '-'; end++ {		}		p := str2frac(expression[beg:end])		sum.add(p)		beg = end	}	i := gcd(abs(sum._1), sum._2)	return fmt.Sprintf("%d/%d", sum._1/i, sum._2/i)}func gcd(a, b int) int {	if b == 0 {		return a	}	return gcd(b, a%b)}func str2frac(s string) (p pair) {	strs := strings.Split(s, "/")	p._1, _ = strconv.Atoi(strs[0])	p._2, _ = strconv.Atoi(strs[1])	return}func abs(x int) int {	if x < 0 {		return -x	}	return x}
 |