#!/bin/bash
# your code goes here
declare -A rti #羅馬數字轉阿拉伯數字轉換表
rti+=(["I"]=1 ["IV"]=4 ["V"]=5 ["IX"]=9 ["X"]=10 ["XL"]=40 ["L"]=50 ["XC"]=90 \
["C"]=100 ["CD"]=400 ["D"]=500 ["CM"]=900 ["M"]=1000)
declare -A itr #阿拉伯數字轉羅馬數字轉換表
itr+=(["1"]=I ["4"]=IV ["5"]=V ["9"]=IX ["10"]=X ["40"]=XL ["50"]=L ["90"]=XC \
["100"]=C ["400"]=CD ["500"]=D ["900"]=CM ["1000"]=M)
passvar= #romtoint的傳遞參數
function romtoint () { #羅馬數字字串轉阿拉伯數字
sum=0
tmp=$1
while [ ! -z "$tmp" ]; do #當字串不為空的時候
if [ ${rti[${tmp:0:1}]} -lt ${rti[${tmp:1:1}]} >/dev/null 2>&1 ]; then #每次比較第一個和第二個字元轉換後的大小關係
sum=$((sum + ${rti[${tmp:0:2}]})) #若後者比前者大,那麼視為兩個一組看待
tmp=${tmp:2}
else
sum=$((sum + ${rti[${tmp:0:1}]})) #反之,視為一組看待
tmp=${tmp:1}
fi
done
passvar=$sum
}
passvar2=
modtest=(1000 900 500 400 100 90 50 40 10 9 5 4 1)
function inttorom () { #阿拉伯數字轉羅馬數字字串
res=
tmp=$1
count=0
for i in `seq 0 13`; do #依序從1000開始扣除
while [ $tmp -ge ${modtest[$i]} 2>/dev/null ]; do #直到那個單位不能再扣除為止
tmp=$((tmp - ${modtest[$i]}))
count=$((count + 1))
done
if [ $count -gt 0 ]; then #當次數大於0才需要顯示
for j in `seq 1 $count`; do
res=`echo "$res${itr[${modtest[$i]}]}"` #結果字串串接
done
fi
count=0 #重置計算
done
passvar2=$res
}
while read fst snd; do
if [ "$fst" == "#" ]; then
break
else
if [ "$fst" == "$snd" ]; then
echo "ZERO"
else
romtoint $fst
fst=$passvar
romtoint $snd
snd=$passvar
dif=$((fst - snd))
dif=`echo $dif | tr -d -` #取絕對值
inttorom $dif
echo $passvar2
fi
fi
done