#!/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