Bir harf dizisini Romen rakamı olarak yorumlamak için bir algoritma yazın. (aşağıdaki romen rakam kurallarına bakın)
Her ayrı harfin eşleşen bir Arapça ondalık değeri vardır, maksimum değil. Ama önceden anahtarın yok, yani{A=10, I=1, X=5, ... Z=1000000}
yorumunuza karar verilir.
Meydan okuma
- Girişi
STDIN
veya eşdeğeri üzerinden okuma ve çıkışıSTDOUT
veya eşdeğeri üzerinden yazma - Geçerli girişler, büyük ve küçük harf kombinasyonlarıdır;
\[a-zA-Z]+\
- Harf dizisinin geçerli Romen rakamı olarak yorumlanıp yorumlanamayacağını görmek için giriş doğrulanmalıdır
- Giriş doğrulaması geçerse, geçerli çıkış düşük Arapça ondalık yorumlanması olmalı ve anahtar yani kullanılan
Aa
olarak yorumlanır4 {a=5, A=1}
değil6 {A=5, a=1}
ya9 {a=10, a=1}
Romen Rakamıyla İlgili Kurallar
Sadece on gücü temsil eden harfler tekrarlanabilir, en fazla üç kez art arda ve toplamda dört kez örn.
II
III
XXXIX
Bir veya daha fazla harf daha değerli başka bir harfin arkasına yerleştirilirse, bu miktarı ekleyin
AAaa => 22 {A=10, a=1} (20 + 2 = 22) bbAAaa => 222 {b=100, A=10, a=1} (200 + 20 + 2 = 222)
Bir harf daha değerli başka bir harfin önüne yerleştirilirse, bu miktarı çıkarın
Aa => 4 {a=5, A=1} (5 – 1 = 4) AaA => 19 {A=10, a=1} (10 + 10 – 1 = 19) BbBaA => 194 {B=100, b=10, A=5, a=1} (100 + 100 - 10 + 5 - 1 = 194)
Romen rakamlarından miktar çıkarmak için çeşitli kurallar geçerlidir:
- Sadece çıkarma on ie güçler
1, 10, 100...
değil5, 50, 500...
- Hiçbir çift çıkarma dolayısıyla
18
olarak yazılırXVIII
değilIIXX (10 + 10 - 1 - 1)
- On kat daha büyük bir sayı çıkarmayın.
Sen çıkarabilirsiniz1
gelen5
ya10
ama değil itibaren50, 100, 500...
- Sadece çıkarma on ie güçler
Misal
Input:
Aa
BAa
CCCXLVII
MMMCDVII
ABADDF
XVVX
FAASGSH
DXCCDA
AaBbcDEf
Output:
4 {a=5, A=1}
14 {B=10, a=5, A=1}
347 {C=100, L=50, X=10, V=5, I=1}
347 {M=100, D=50, C=10, V=5, I=1}
1921 {A=1000, B=100, D=10, F=1}
'XVVX' failed Roman numeral test
7191 {F=5000, A=1000, S=100, G=10, H=1}
'DXCCDA' failed Roman numeral test
4444 {a=5000, A=1000, b=500, B=100, D=50, c=10, f=5, E=1}
Aa
1 değerine sahiptir (A = 1, a = 2).