文字列 "a/b" の形式で表される 2 つの分数の和を,同じ形式で表示する
分母が 1 の場合は,分子だけを表示する
func = function(s1, s2) {
euclid = function(m, n) { # ユークリッドの互除法
while ((temp = n%%m) != 0) {
n = m
m = temp
}
return(m)
}
a = as.integer(unlist(strsplit(s1, "/")))
b = as.integer(unlist(strsplit(s2, "/")))
denominator = a[2] * b[2]
numerator = a[1] * b[2] + b[1] * a[2]
gcm = euclid(denominator, numerator)
denominator = denominator / gcm
numerator = numerator / gcm
if (denominator == 1)
cat(numerator)
else
cat(numerator, denominator, sep = "/")
cat("\n")
}
func("5/6", "1/10") # 14/15
func("1/3", "2/3") # 1
func("1/3", "2/7") # 13/21
func("2/8", "3/5") # 17/20
func("3/10", "1/6") # 7/15
func("3/4", "5/8") # 11/8
func("2/5", "2/3") # 16/15