AWK(GAWK) で書いてみた。
このような場合は AWK の方がすっきり書ける。
#!/usr/local/bin/gawk -f
function euclid(m, n, temp) {
while ((temp = n % m) != 0) {
n = m
m = temp
}
return m
}
function prog(s1, s2, a, b, gcm, denominator, numerator) {
split(s1, a, "/")
split(s2, b, "/")
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)
print numerator
else
print numerator "/" denominator
}
BEGIN {
prog("5/6", "1/10") # 14/15
prog("1/3", "2/3") # 1
prog("1/3", "2/7") # 13/21
prog("2/8", "3/5") # 17/20
prog("3/10", "1/6") # 7/15
prog("3/4", "5/8") # 11/8
prog("2/5", "2/3") # 16/15
}
※コメント投稿者のブログIDはブログ作成者のみに通知されます