새로운 스택 기반 언어를 구현할 시간입니다! 그것을 StackyMath라고합니다. 이것은 스택에 8 개의 연산과 스택에 숫자를 추가하는 방법을 가진 스택 기반 언어입니다.
작업 목록 :
/: 부서. 스택의 상위 2 개 숫자에서 수행됩니다. 결과를 스택으로 다시 푸시합니다.*: 곱셈. 스택의 상위 2 개 숫자에서 수행됩니다. 스택에서 결과를 다시 푸시-: 빼기. 스택의 상위 2 개 숫자에서 수행됩니다. 스택에서 결과를 다시 푸시+: 추가. 스택의 상위 2 개 숫자에서 수행됩니다. 스택에서 결과를 다시 푸시^: 지수. 스택의 상위 2 개 숫자에서 수행됩니다. 스택에서 결과를 다시 푸시%: 모듈로. 스택의 상위 2 개 숫자에서 수행됩니다. 스택에서 결과를 다시 푸시!: 계승. 스택의 최상위 번호에서 수행됩니다. 스택에서 결과를 다시 푸시D: 스택에서 최상위 번호를 복제
의사 코드로 정의 된 연산 :
/:push(pop divided by pop)*:push(pop times pop)-:push(pop minus pop)+:push(pop plus pop)^:push(pop to the pop)%:push(pop mod pop)!:push(factorial pop)D:t = pop; push(t); push(t)
숫자를 스택에 푸시하는 방법 :
스택에 숫자를 추가하는 것은 쉽습니다. 필요한 경우 프로그램에 원시 숫자를 넣으십시오. 스택에 여러 숫자를 입력해야하는 경우 쉼표 ( ,) 로 구분할 수 있습니다 . 프로그램은 -입력에서 숫자 를 처리 할 필요가 없습니다 . 사용자가 1을 원하면 부정하고 싶은 숫자를 0으로 밀어야합니다 -. 프로그램 입력의 숫자도 양의 정수로 제한됩니다.
입력:
프로그램은 명령 행 또는 표준 입력에서 입력을 가져와야합니다. 입력은 다음으로 구분 된 숫자 (과학적 표기법 또는 소수 없음)로만 구성됩니다. , 필요에 따라 와 위에 정의 된 연산으로 .
산출:
프로그램은 스택 상단에 번호를 인쇄해야합니다.
오류 사례 :
- 프로그램이 용지를 너무 많이 넣으려고하면 인쇄해야합니다.
StackUnderflowException!!!. - 0으로 나누면 인쇄
DivisionByZeroException!!! - 프로그램을 실행하거나 입력에서 숫자를 처리하는 동안 64 비트를 초과하는 숫자가 인쇄되면
NumberOverflowException!!! - 어떻게 든 스택 상단에 음수가 생기고 계승을 해야하는 경우 인쇄하십시오.
NegativeFactorialException!!! - 스택 상단에 부동 소수점 숫자가 있고 다음 작업이 계승 인 경우 인쇄
FloatingFactorialException!!! - 프로그램이 종료 될 때 스택에 숫자가없는 경우 (예 : 프로그램이 비어 있음) 인쇄
EmptyProgram!!!
노트:
- 에 대한 모든 오류 출력에 오류가 발생하거나 가장 가까운 값을 가져야합니다.
- 모든 숫자는 64 비트 부동 소수점으로 제한됩니다.
예제 프로그램 :
50,47* -> 2350
50,47/ -> 0.94
100,8! -> 40320
100D* -> 10000
! -> StackUnderflowException!!!
5,2/! -> FloatingFactorialException!!!
4,3!2*/ -> 3
654,489,48,43/5*7D+-*% -> 77.68749999999909
-> EmptyProgram!!!
(필요한 경우 더 추가 할 수 있습니다)
654,489,48,43/5*7D+-*%반환해야합니다 77.6875. ( 43/48*5-(7+7)해야한다 (7+7)-43/48*5)
!로F).