헤르메스 포세이돈(HP)이 최신 기술로 새 계산기 HP CXX를 만들었다. 이 계산기는 I부터 MMMMCMXCIX까지의 정수에 대해 사칙연산을 지원한다.
이 문제에서는 HP CXX의 동작을 시뮬레이션한다. 입력의 각 줄은 다음 중 하나이다.
+, -, *, /.= 연산. 스택 맨 위의 값을 (로마 숫자로) 출력하라는 요청이다.연산 규칙은 다음과 같다. 스택 맨 위의 값을 첫 번째 수, 그 바로 아래의 값을 두 번째 수라고 하자.
+, *: (두 번째 + 첫 번째) 또는 (두 번째 × 첫 번째)를 스택에 넣는다.-: (두 번째 − 첫 번째)를 넣는다. 즉 두 번째 수에서 첫 번째 수를 뺀다./: (두 번째 ÷ 첫 번째)를 정수 나눗셈으로 계산해 넣는다. 즉 두 번째 수를 첫 번째 수로 나눈다. 나누는 수(첫 번째 수)가 0이면 division by zero exception을 출력하고, 나뉘는 수(두 번째 수)만 스택에 다시 넣으며 나누는 수는 넣지 않는다.연산을 요청했지만 스택에 수가 충분하지 않으면 stack underflow를 출력하고 스택을 그대로 둔다. 이는 이항 연산 + - * /와 출력 연산 = 모두에 적용된다.
=로 출력하려는 값이 0 이하이거나 MMMMCMXCIX(4999)보다 크면 out of range exception을 출력하고 다음 입력 줄로 넘어간다.
로마 숫자. 각 글자는 다음 값을 나타낸다.
| 로마 숫자 | 값 |
|---|---|
| I | 1 |
| V | 5 |
| X | 10 |
| L | 50 |
| C | 100 |
| D | 500 |
| M | 1000 |
글자를 나열하면 그 값을 더한다. 예를 들어 XXX = 10 + 10 + 10 = 30, LXI = 50 + 10 + 1 = 61이다. 작은 값이 큰 값 앞에 오면 대신 뺀다. 예를 들어 IV = 5 − 1 = 4, XC = 100 − 10 = 90이다. 다음 규칙을 따른다.
입력의 각 줄은 다음 중 하나이다.
+, -, *, /, 또는 출력 연산 =.입력은 파일의 끝(EOF)에서 종료된다.
일이 일어나는 순서대로 한 줄씩 출력한다.
= 연산에 대해 스택 맨 위의 값을 로마 숫자로 출력한다.division by zero exceptionstack underflowout of range exception그 밖의 출력은 하지 않는다.