>>287 Ruby

args = [0, 1, 2, 3, 10, 9999, 123456789, 31415926535897]

floor_log10 = -> n {r = 1; (0..n).find{ r *= 10; r > n}}
kotae = ->n{
x = floor_log10[n + 1]
((9*x - 1)*10**x + 10)/18 + (n-10**x+1)/2 * (x + 1) + (n < 8 ? n & 1 : 0)
}
args.each{|e| puts '%d => %d' % [e, kotae[e]]}
# =>
0 => 0
1 => 1
2 => 1
3 => 2
10 => 5
9999 => 19445
123456789 => 500000000
31415926535897 => 214355930195731