문제 A: 단순 계산기

2523 단어
최근 에 codeup 을 칠 할 때 문제 의 난이도 가 높 아 지 는 것 을 느 꼈 기 때문에 후속 단계 에서 codeup 에서 어 려 운 문 제 를 점차적으로 업데이트 할 것 입 니 다.
생각:
문 제 를 보고 데이터 구 조 를 먼저 생각 했 을 때 배 운 접미사 와 접미사 표현 식 이 생각 났 습 니 다.실현 방향 은 다음 과 같다.
1. 우선 접미사 표현 식 을 접미사 표현 식 으로 바 꿉 니 다. 여기 서 우 리 는 대기 열과 창 고 를 빌려 야 합 니 다.접미사 표현 식 을 처리 하고 숫자 에 대해 push 를 대기 열 에 직접 넣 습 니 다.기호 에 대해 현재 기호 와 기호 스 택 꼭대기 기호의 우선 순위 관 계 를 판단 합 니 다. 만약 에 현재 기호의 우선 순위 가 스 택 꼭대기 기호 보다 작 으 면 스 택 꼭대기 기 호 는 스 택 에서 나 와 대기 열 에 들 어가 계속 비교 합 니 다.그렇지 않 으 면 현재 기 호 를 창고 에 넣 습 니 다.
2. 접미사 표현 식 을 얻 은 후 접미사 표현 식 을 계산 하여 순서대로 대기 열 에서 pop 합 니 다.동시에 스 택 을 사용 하여 결 과 를 저장 해 야 합 니 다.대기 열 에서 추출 한 문 자 는 두 가지 상황 으로 나 뉘 어 숫자 가 스 택 에 직접 들 어 갑 니 다. 조작 부 호 는 스 택 꼭대기 에서 두 개의 수 를 순서대로 팝 업 하여 연산 자 를 계산 한 후에 결 과 를 다시 스 택 에 들 어가 야 합 니 다.마지막 창고 에 남 은 숫자 는 우리 의 계산 결과 이다.
#include
#include
#include
#include
#include
using namespace std;
 
struct node{
	double num;
	char op;
	bool flag;
};
queue q;
stack s;
string str;
map mp;
void change(){
	double num;
	node temp;
	for (int i = 0; i < str.length();) {
		if (str[i] >= '0'&&str[i] <= '9') {
			temp.flag = true;
			temp.num = str[i++] - '0';
			while (i < str.length() && str[i] >= '0'&&str[i] <= '9') {
				temp.num = temp.num * 10 + (str[i] - '0');
				i++;
			}
			q.push(temp);
		}else{
			temp.flag = false;
			while(!s.empty() && mp[str[i]]<=mp[s.top().op]){
				q.push(s.top());
				s.pop();
			}
			temp.op = str[i];
			s.push(temp);
			i++;
		}
	}
	while(!s.empty()){
		q.push(s.top());
		s.pop();
	}
}

double Cal(){
	double temp1, temp2;
	node cur, temp;
	while(!q.empty()){
		cur = q.front();
		q.pop();
		if(cur.flag) s.push(cur);
		else{
			temp2 = s.top().num;
			s.pop();
			temp1 = s.top().num;
			s.pop();
			temp.flag = true;
			if (cur.op == '+') temp.num = temp1 + temp2;
			else if (cur.op == '-') temp.num = temp1 - temp2;
			else if (cur.op == '*') temp.num = temp1 * temp2;
			else temp.num = temp1 / temp2;
			s.push(temp);
		}
	}
	return s.top().num;
}

int main(){
	mp['+'] = mp['-'] = 1;
	mp['*'] = mp['/'] = 2;
	while(getline(cin, str)&&str!="0"){
		for(int i=0; i

좋은 웹페이지 즐겨찾기