Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ
Π ΠΈΠΌΡΠΊΠΈΠ΅ ΡΠΈΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΡΠ΅ΠΌΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ:
| Π‘ΠΈΠΌΠ²ΠΎΠ» | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ |
|---|---|
| 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Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊIV, Π° Π½Π΅IIII(I ΠΏΠ΅ΡΠ΅Π΄ V Π·Π½Π°ΡΠΈΡ 5 β 1).9Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊIX.
Π‘Π»ΡΡΠ°ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²ΡΡΠΈΡΠ°Π½ΠΈΡ:
- I ΠΏΠ΅ΡΠ΅Π΄ V (5) ΠΈ X (10) β 4 ΠΈ 9
- X ΠΏΠ΅ΡΠ΅Π΄ L (50) ΠΈ C (100) β 40 ΠΈ 90
- C ΠΏΠ΅ΡΠ΅Π΄ D (500) ΠΈ M (1000) β 400 ΠΈ 900
Π€ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π·Π°Π΄Π°ΡΠ° Π·Π²ΡΡΠΈΡ ΡΠ°ΠΊ:
ΠΠ°Π½ ΡΠΈΠΌΡΠΊΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» (ΡΡΡΠΎΠΊΠ°). ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠΉΡΠ΅ Π΅Π³ΠΎ Π² ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅: ΠΏΡΠΎΡ ΠΎΠ΄ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ Ρ ΡΡΡΡΠΎΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°
ΠΠ΄Π΅Ρ
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΈΠ΄ΡΡ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°:
- ΠΠ΅ΡΡΠΌ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
- Π‘ΠΌΠΎΡΡΠΈΠΌ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» (Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΡΡ).
- ΠΡΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ β Π·Π½Π°ΡΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π²ΡΡΠΈΡΠ°Π½ΠΈΡ: Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΡ ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ».
- ΠΠ½Π°ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡ ΠΎΠ΄ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
var romanIntDict = map[byte]int{
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000,
}
func romanToInt(s string) int {
res := 0
for i := 0; i < len(s); i++ {
c := romanIntDict[s[i]]
n := 0
if i != len(s) - 1 {
n = romanIntDict[s[i + 1]]
}
if n > c {
res += n - c
i++
continue
}
res += c
}
return res
}Π Π΅ΡΠ΅Π½ΠΈΠ΅: ΠΏΡΠΎΡ ΠΎΠ΄ ΡΠΏΡΠ°Π²Π° Π½Π°Π»Π΅Π²ΠΎ
ΠΠ΄Π΅Ρ
ΠΠ΄Π΅Ρ: ΡΠΈΠΌΡΠΊΠΈΠ΅ ΡΠΈΡΠ»Π° ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ ΡΠΏΡΠ°Π²Π° Π½Π°Π»Π΅Π²ΠΎ.
- ΠΡΠ»ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ (ΡΠΎΡΠ΅Π΄Π° ΡΠΏΡΠ°Π²Π°) β Π²ΡΡΠΈΡΠ°Π΅ΠΌ.
- ΠΠ½Π°ΡΠ΅ β ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ΅ΠΌ.
var romanIntDict = map[byte]int{
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000,
}
func romanToInt(s string) int {
res := 0
prev := 0
for i := len(s) - 1; i >= 0; i-- {
cur := romanIntDict[s[i]]
if cur < prev {
res -= cur
} else {
res += cur
}
prev = cur
}
return res
}ΠΠ»ΡΡ: Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ».
ΠΠΈΠ½ΡΡ: ΡΡΡΡ ΠΌΠ΅Π½Π΅Π΅ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΡΠ΅Π½ΠΈΠΈ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅: ΡΠ»ΠΎΠ²Π°ΡΡ ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠΈ
ΠΠ΄Π΅Ρ
ΠΠΌΠ΅ΡΡΠΎ Π»ΠΎΠ³ΠΈΠΊΠΈ βΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ»β, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΠ°Π½Π΅Π΅ Π·Π°Π²Π΅ΡΡΠΈ ΡΠ»ΠΎΠ²Π°ΡΡ Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠΌΠΈ Π²ΡΡΠΈΡΠ°Π½ΠΈΠΉ (IV, IX, XL, β¦).
Π’ΠΎΠ³Π΄Π° Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΈΠ΄ΡΡ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ:
- Π΅ΡΠ»ΠΈ Π²ΡΡΡΠ΅ΡΠ°Π΅ΠΌ Π΄Π²ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ β Π±Π΅ΡΡΠΌ Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π²ΠΈΠ³Π°Π΅ΠΌΡΡ Π½Π° 2 ΡΠ°Π³Π°;
- ΠΈΠ½Π°ΡΠ΅ Π±Π΅ΡΡΠΌ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ».
var romanIntDict = map[string]int{
"I": 1, "V": 5, "X": 10, "L": 50,
"C": 100, "D": 500, "M": 1000,
"IV": 4, "IX": 9, "XL": 40, "XC": 90,
"CD": 400, "CM": 900,
}
func romanToInt(s string) int {
res := 0
for i := 0; i < len(s); {
if i+1 < len(s) {
if val, ok := romanIntDict[s[i:i+2]]; ok {
res += val
i += 2
continue
}
}
res += romanIntDict[string(s[i])]
i++
}
return res
}ΠΠ»ΡΡ: ΡΠ²Π½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π²ΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ
ΡΠ»ΡΡΠ°Π΅Π².
ΠΠΈΠ½ΡΡ: Π±ΠΎΠ»ΡΡΠ΅ Π΄Π°Π½Π½ΡΡ
Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅.