小数の足し算をして下さい。ただしこの小数は、
小数第 n 位 が 11-n 進数
という不思議なルールになっています。例えば、小数第1位は 10進数、小数第9位は2進数です。
このルールを「変進小数」と呼びます。
入力は8.622+3.177
こんな感じです。
2個の変進小数が「+」で区切られて並んでいます。
出力は、11.811
のように、足し算の結果を変進小数で出力して下さい。
素直にプログラム
conv = function(s) {
s = unlist(strsplit(s, "\\."))
t = as.numeric(unlist(strsplit(s[2], "")))
c(as.numeric(s[1]), c(t, rep(0, 9))[1:9])
}
deconv = function(x) {
for (i in 10:2) {
if (x[i] >= 12-i) {
x[i-1] = x[i-1]+1
x[i] = x[i]-(12-i)
}
}
as.numeric(paste(x[1], ".", paste(x[2:10], collapse=""), sep=""))
}
x = "8.622+3.177"
options(scipen=100)
a = unlist(strsplit(x, "\\+"))
deconv(conv(a[1])+conv(a[2]))