Codeforces 143 B. Help Kingdom of Far Far Away 2
問題
与えられた数字を
$をつけて、3桁ごとにカンマで区切り、小数点2桁未満を切り捨てて表示せよ。
数字が負の場合は、さらにその文字列を()でかこって表示せよ。
制約条件
与えられる数字の桁数≦50
方針
指示に従って整形する。
rubyで書いてみた。
rubyで3桁ごとに区切るには、正規表現を使うと楽っぽい。
こんな風に。
a.reverse.gsub(/(\d{3})(?=\d)/, '\1,').reverse
(?=〜)は、先読み(look ahead)という表現で、
re1(?=re2)は、re2が続くre1にマッチする、という意味だそう。
""で囲まれた文字列の式展開(#{}が式に展開される)を使うともっと簡単に書けるっぽい。
ソースコード
a, b = gets.split(".").map(&:chomp) ans = "" if a[0] == "-" ans += "(" a = a[1...a.length] end ans += "$" ans += a.reverse.gsub(/(\d{3})(?=\d)/, '\1,').reverse b ||= "0" ans += "." + (b + "00")[0..1] ans += ")" if ans[0] == "(" puts ans