계산기

시간 제한1초메모리 제한128 MB

요약
완전히 괄호로 감싸진 산술식을 파싱해 최대 90자리 큰 수로 계산하고, 오버플로우나 음수 결과, 0으로 나누기가 발생하면 Error를 출력하는 프로그램을 작성합니다.
난이도

보통10점 중 4점

유형
문자열, 수학, 재귀, 구현
정답자
아직 제출이 없습니다

문제

어떤 계산기는 최대 9090자리 길이의 수를 다루며, 다음 문법을 가진 식을 계산한다.

<expression> ::= <number> | (<expression><operator><expression>)
<operator>   ::= + | - | * | /
<number>     ::= an unsigned decimal integer number

연산자는 다음과 같다: +(덧셈), -(뺄셈), *(곱셈), /(정수 나눗셈, 몫을 구한다). 다음 경우에 계산기는 계산을 중단한다: 1) 00으로 나누는 경우, 2) 어떤 연산의 결과가 음수이거나 9090자리를 초과하는 경우, 3) 입력으로 주어진 어떤 수가 9090자리를 초과하는 경우.

이 계산기를 흉내 내는 프로그램을 작성하시오. 입력에서 읽은 각 식마다, 프로그램은 그 식의 값을 출력 줄의 맨 앞부터 출력한다. 계산기가 그 식의 계산을 중단하면 Error라는 단어를 출력한다. 한 식은 최대 9090개의 연산자를 포함할 수 있으며, 문법적으로 올바르다. 공백 문자는 입력에서 자유롭게 사용될 수 있고, 입력은 파일의 끝(EOF)으로 종료된다.

예제1

  1. 예제 1

    입력
    (((100000000000 * 100000000000) / 5)-1)
    100
    (0*(1000000000000000000000000000000 *
       (1000000000000000000000000000000 *
        1000000000000000000000000000000)))
    ((1-2)+1)
    (0*(1/0))
    
    예상 출력
    1999999999999999999999
    100
    Error
    Error
    Error