창고 의 응용 - 표현 식 값 구하 기
제목 설명
표현 식 을 지정 합 니 다. 그 중에서 연산 자 는 +, -, *, / (가감 승 정제) 만 포함 하고 괄호 를 포함 할 수 있 습 니 다. 표현 식 의 최종 값 을 구 하 십시오.주의:
4. 567917. 데 이 터 는 주어진 표현 식 이 합 법 적 임 을 보증 합 니 다
4. 567917. 문제 보증 기호 - 마이너스 로 만 나타 나 고 마이너스 로 나타 나 지 않 습 니 다. 예 를 들 어 - 1 + 2, (2 + 2) * (- (1 + 1) + 2) 와 같은 표현 식 은 나타 나 지 않 습 니 다
4. 567917. 제목 보증 표현 식 의 모든 숫자 는 정수 입 니 다
4. 567917. 문제 보증 표현 식 은 중간 계산 과정 과 결과 에서 모두 2 ^ 31 - 1 을 초과 하지 않 습 니 다
4. 567917. 문제 중의 정 제 는 0 을 가리 키 는 것 이다. 즉, 0 이상 의 결과 에 대해 아래로 정 리 를 하 는 것 이다. 예 를 들 어 5 / 3 = 1, 0 이하 의 결과 에 대해 위로 정 리 를 하 는 것 이다. 예 를 들 어 5 / (1 - 4) = - 1
4. 567917. C + + 와 자바 의 정 제 는 기본적으로 0 으로 정 리 됩 니 다.Python 의 정리 / / 기본 값 은 아래로 추출 되 기 때문에 Python 의 eval () 함수 에서 의 정리 도 아래로 추출 되 어 이 문제 에서 직접 사용 할 수 없습니다.원본 링크:https://www.acwing.com/problem/content/description/3305/
문제 풀이 의 사고 방향.
우선 기호의 우선 순위 ")" > "/" = "*" > "+" = "-" > "(" 이후 우선 순위 비교 가 있 기 때문에 우선 순위 의 높 고 낮 음 을 hash 표 로 저장 합 니 다.
unordered_map<char, int> pr{
{
'+', 1}, {
'-', 1}, {
'*', 2}, {
'/', 2}};
명확 한 사고방식: STEP 1: 산술 표현 식 을 접미사 표현 식 으로 변환 합 니 다. STEP 2: 그리고 이 접미사 표현 식 에 값 을 구 합 니 다.
전체 코드
#include
#include
#include
#include
#include
using namespace std;
stack<int> num;
stack<char> op;
void eval()
{
auto b = num.top(); num.pop();
auto a = num.top(); num.pop();
auto c = op.top(); op.pop();
int x;
if (c == '+') x = a + b;
else if (c == '-') x = a - b;
else if (c == '*') x = a * b;
else x = a / b;
num.push(x);
}
int main()
{
unordered_map<char, int> pr{
{
'+', 1}, {
'-', 1}, {
'*', 2}, {
'/', 2}};
string str;
cin >> str;
for (int i = 0; i < str.size(); i ++ )
{
auto c = str[i];
if (isdigit(c))
{
int x = 0, j = i;
while (j < str.size() && isdigit(str[j]))
x = x * 10 + str[j ++ ] - '0';
// 12 '1' '2'
i = j - 1;
num.push(x);
}
else if (c == '(') op.push(c);
//
else if (c == ')')
{
while (op.top() != '(') eval();
op.pop();
}
else
{
while (op.size() && op.top() != '(' && pr[op.top()] >= pr[c]) eval();
op.push(c);
}
}
while (op.size()) eval();
cout << num.top() << endl;
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Dubbo (2): zookeeper 등록 센터Zookeeper 는 Apacahe Hadoop 의 하위 프로젝트 로 트 리 형태의 디 렉 터 리 서비스 로 푸 시 변경 을 지원 하 며 Dubbo 서비스의 등록 센터 로 적합 하 며 산업 강도 가 높 아 생산 환경...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.