로마 형식의 문자열이 주어지면 이 주어진 로마 문자열을 정수로 변환하는 작업이 수행됩니다.
로마 숫자 다음 기호를 기반으로 합니다.
상징 | 값 |
|---|---|
나 자바 부울 문자열 | 1 |
안에 | 5 |
엑스 글꼴 크기 라텍스 | 10 |
엘 | 오십 자바의 멀티스레딩 |
씨 | 100 |
디 | 500 멍청한 평균 |
중 | 1000 |
예:
로마숫자를 정수로 연습하는 것이 좋습니다. 시도해 보세요!입력: 9
산출: 9
설명: IX는 9를 나타내는 로마 기호입니다.입력: 특대
산출: 40
설명: XL는 40을 나타내는 로마 기호입니다.입력: MCMIV
산출: 1904년
설명: M은 천, CM은 900, IV는 4입니다.
접근하다: 로마 숫자의 숫자는 내림차순(예: M이 먼저, D가 뒤따르는 등)으로 작성된 이러한 기호의 문자열입니다. 그러나 몇 가지 특정한 경우에는 4개의 문자가 연속해서 반복되는 것을 방지하려면(예: IIII 또는 XXXX) 빼기 표기법 다음과 같이 자주 사용됩니다.
- 나 이전에 배치 안에 또는 엑스 1이 적다는 뜻이므로 4는 IV (5보다 1이 작은 것)이고 9는 IX(10보다 1이 작은 것)입니다.
- 엑스 이전에 배치 엘 또는 씨 10이 적다는 뜻이므로 40은 특대 (10은 50보다 작음) 그리고 90은 XC (100보다 작은 10).
- 씨 이전에 배치 디 또는 중 100이 적다는 뜻이므로 400은 CD (100은 500보다 적음) 그리고 900은 센티미터 (천보다 백이 적습니다).
로마 숫자를 정수로 변환하는 알고리즘:
평균 대 평균
- 로마 숫자 문자열을 로마 기호(문자)로 분할합니다.
- 로마 숫자의 각 기호를 그것이 나타내는 값으로 변환합니다.
- 인덱스 0부터 시작하여 기호를 하나씩 가져옵니다.
- 기호의 현재 값이 다음 기호의 값보다 크거나 같으면 이 값을 누계에 추가합니다.
- 그렇지 않으면 누계에 다음 기호의 값을 더하여 이 값을 뺍니다.
위의 알고리즘을 구현하면 다음과 같습니다.
C++ // Program to convert Roman // Numerals to Numbers #include using namespace std; // This function returns value // of a Roman symbol int value(char r) { if (r == 'I') return 1; if (r == 'V') return 5; if (r == 'X') return 10; if (r == 'L') return 50; if (r == 'C') return 100; if (r == 'D') return 500; if (r == 'M') return 1000; return -1; } // Returns decimal value of // roman numaral int romanToDecimal(string& str) { // Initialize result int res = 0; // Traverse given input for (int i = 0; i < str.length(); i++) { // Getting value of symbol s[i] int s1 = value(str[i]); if (i + 1 < str.length()) { // Getting value of symbol s[i+1] int s2 = value(str[i + 1]); // Comparing both values if (s1>= s2) { // 현재 심볼의 값은 // 다음 심볼보다 크거나 같습니다. res = res + s1; } else { // 현재 심볼의 값은 // 다음 심볼보다 작습니다. res = res + s2 - s1; 나++; } } else { res = res + s1; } } 해상도를 반환; } // 드라이버 코드 int main() { // 제공된 입력을 고려하면 유효한 문자열입니다. str = 'MCMIV'; 시합<< 'Integer form of Roman Numeral is ' << romanToDecimal(str) << endl; return 0; }> 씨 // Program to convert Roman // Numerals to Numbers #include #include // This function returns value // of a Roman symbol int value(char r) { if (r == 'I') return 1; if (r == 'V') return 5; if (r == 'X') return 10; if (r == 'L') return 50; if (r == 'C') return 100; if (r == 'D') return 500; if (r == 'M') return 1000; return -1; } // Returns decimal value of // roman numaral int romanToDecimal(char str[]) { // Initialize result int res = 0; // Traverse given input for (int i = 0; i < strlen(str); i++) { // Getting value of symbol s[i] int s1 = value(str[i]); if (i + 1 < strlen(str)) { // Getting value of symbol s[i+1] int s2 = value(str[i + 1]); // Comparing both values if (s1>= s2) { // 현재 심볼의 값은 // 다음 심볼보다 크거나 같습니다. res = res + s1; } else { // 현재 심볼의 값은 // 다음 심볼보다 작습니다. res = res + s2 - s1; 나++; } } else { res = res + s1; } } 해상도를 반환; } // 드라이버 코드 int main() { // 제공된 입력이 유효한 것으로 간주됩니다. char str[10] = 'MCMIV'; printf('정수 형식의 로마 숫자는 %d',romanToDecimal(str)); 0을 반환합니다. }> 자바 // Program to convert Roman // Numerals to Numbers import java.util.*; public class RomanToNumber { // This function returns // value of a Roman symbol int value(char r) { if (r == 'I') return 1; if (r == 'V') return 5; if (r == 'X') return 10; if (r == 'L') return 50; if (r == 'C') return 100; if (r == 'D') return 500; if (r == 'M') return 1000; return -1; } // Finds decimal value of a // given roman numeral int romanToDecimal(String str) { // Initialize result int res = 0; for (int i = 0; i < str.length(); i++) { // Getting value of symbol s[i] int s1 = value(str.charAt(i)); // Getting value of symbol s[i+1] if (i + 1 < str.length()) { int s2 = value(str.charAt(i + 1)); // Comparing both values if (s1>= s2) { // 현재 심볼의 값은 // 다음 심볼보다 크거나 같습니다. res = res + s1; } else { // 현재 심볼의 값은 // 다음 심볼보다 작습니다. res = res + s2 - s1; 나++; } } else { res = res + s1; } } 해상도를 반환; } // 드라이버 코드 public static void main(String args[]) { RomanToNumber ob = new RomanToNumber(); // 주어진 입력이 유효한 것으로 간주 String str = 'MCMIV'; System.out.println('정수형 로마 숫자' + ' is ' + ob.romanToDecimal(str)); } }> 파이썬 # Python program to convert Roman Numerals # to Numbers # This function returns value of each Roman symbol def value(r): if (r == 'I'): return 1 if (r == 'V'): return 5 if (r == 'X'): return 10 if (r == 'L'): return 50 if (r == 'C'): return 100 if (r == 'D'): return 500 if (r == 'M'): return 1000 return -1 def romanToDecimal(str): res = 0 i = 0 while (i < len(str)): # Getting value of symbol s[i] s1 = value(str[i]) if (i + 1 < len(str)): # Getting value of symbol s[i + 1] s2 = value(str[i + 1]) # Comparing both values if (s1>= s2): # 현재 심볼의 값이 다음 심볼보다 크거나 # 같습니다 res = res + s1 i = i + 1 else: # 현재 심볼의 값이 다음 심볼보다 크거나 # 같습니다 res = res + s2 - s1 i = i + 2 else: res = res + s1 i = i + 1 return res # 드라이버 코드 print('정수 형식의 로마 숫자는'), print(romanToDecimal('MCMIV'))>'>씨#= s2) { // 현재 심볼의 값이 // 다음 심볼보다 크거나 같습니다. res = res + s1; } else { res = res + s2 - s1; 나++; // 현재 기호의 값은 // 다음 기호보다 작습니다. } } else { res = res + s1; 나++; } } 해상도를 반환; } // 드라이버 코드 public static void Main(string[] args) { GFG ob = new GFG(); // 주어진 입력이 유효한 문자열임을 고려 str = 'MCMIV'; Console.WriteLine('정수형 로마 숫자' + '는 ' + ob.romanToDecimal(str)); } } // 이 코드는 Shrikant13이 제공한 것입니다.> 자바스크립트 >
PHP // Program to convert Roman // Numerals to Numbers // This function returns // value of a Roman symbol function value($r) { if ($r == 'I') return 1; if ($r == 'V') return 5; if ($r == 'X') return 10; if ($r == 'L') return 50; if ($r == 'C') return 100; if ($r == 'D') return 500; if ($r == 'M') return 1000; return -1; } // Returns decimal value // of roman numeral function romanToDecimal(&$str) { // Initialize result $res = 0; // Traverse given input for ($i = 0; $i < strlen($str); $i++) { // Getting value of // symbol s[i] $s1 = value($str[$i]); if ($i+1 < strlen($str)) { // Getting value of // symbol s[i+1] $s2 = value($str[$i + 1]); // Comparing both values if ($s1>= $s2) { // 현재 심볼의 값은 // 다음 심볼보다 크거나 같습니다. $res = $res + $s1; } else { $res = $res + $s2 - $s1; $i++; // 현재 기호의 값은 // 다음 기호보다 작습니다. } } else { $res = $res + $s1; $i++; } } $res를 반환합니다. } // 드라이버 코드 // 입력 고려 // 주어진 것이 유효함 $str ='MCMIV'; echo '로마 숫자의 정수 형식은 ', romanToDecimal($str), '
'; // 이 코드는 ajit가 제공한 것입니다. ?>> 산출
Integer form of Roman Numeral is 1904>
복잡성 분석:
- 시간 복잡도: O(n), 여기서 n은 문자열의 길이입니다.
문자열을 한 번만 순회하면 됩니다. - 보조 공간: O(1), 추가 공간이 필요하지 않습니다.