標籤:length split UNC i+1 pre 規則 str 一個 適用於
原題目是這樣的:羅馬數字包含以下七種字元:I, V, X, L,C,D 和 M。I=1,V=5,X=10,L=50,C=100,D=500,M=1000例如, 羅馬數字 2 寫做 II ,即為兩個並列的 1。12 寫做 XII ,即為 X + II 。 27 寫做 XXVII, 即為 XX + V + II 。通常情況下,羅馬數字中小的數字在大的數位右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為 IX。這個特殊的規則只適用於以下六種情況:
- I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
- X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
- C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
- 給定一個羅馬數字,將其轉換成整數。輸入確保在 1 到 3999 的範圍內。
樣本1:
輸入:“III”
輸出:3
樣本2:
輸入:“IV”
輸出:4
樣本1:
輸入:“MCMXCIV”
輸出:1994
class test{ public function a5($str) { $num = 0; $num_arr = str_split($str); $length = count($num_arr); for ($i=0; $i < $length; $i++) { switch ($num_arr[$i]) { case ‘I‘: switch ($num_arr[$i+1]) { case ‘V‘: $num += 4; $i++; break; case ‘X‘: $num += 9; $i++; break; default: $num += 1; break; } break; case ‘V‘: $num += 5; break; case ‘X‘: switch ($num_arr[$i+1]) { case ‘L‘: $num += 40; $i++; break; case ‘C‘: $num += 90; $i++; break; default: $num += 10; break; } break; case ‘L‘: $num += 50; break; case ‘C‘: switch ($num_arr[$i+1]) { case ‘D‘: $num += 400; $i++; break; case ‘M‘: $num += 900; $i++; break; default: $num += 100; break; } break; case ‘D‘: $num += 500; break; case ‘M‘: $num += 1000; break; default: break; } } echo $num; }}
PHP(4)“羅馬數字轉整數”演算法問題