| 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
 
- }
 
 
  |