Kiki Devlog

[실3][C++] 백준 1935번 후위 표기식 2 (소숫점 제한) 본문

Coding Test/백준

[실3][C++] 백준 1935번 후위 표기식 2 (소숫점 제한)

kimkiki 2022. 5. 28. 00:05
728x90

문제는 쉬웠지만 소수점 2자리까지라는 조건에서 두가지 실수를 했다.

1. 소수점 3번째를 (반올림하지 않고) 버려야 되는 줄 알고 시간 씀.

2. 답이 3.00 이면  3으로 출력해서 틀림.

 

 

소숫점 n 자리로 제한한 출력법

//소숫점 n자리까지 출력하는 법 ( 반올림 O )
cout << fixed; //소숫점의 숫자를 고정시킨다는 뜻
cout.precision(n);//소숫점 n자리.
cout << num<< endl;

 

내 코드

#include<iostream>
#include <string>
#include <stack>
#include <iomanip>
#include <math.h>

using namespace std;

int main() {
	int size;
	string quest;
	int numOfAlphabet[100] = { 0 }; //A=0번째 index, B=1번째 index ...
	stack<double> saveStack;

	//입력 받기
	cin >> size;
	cin.ignore();
	getline(cin, quest);

	// 알파벳에 대응할 숫자를 numOfAlphabet[]에 저장
	for (int i = 0; i < size; i++) {
		cin >> numOfAlphabet[i];
	}

	// quest식을 하나씩 읽으며 계산
	for (int j = 0; j < quest.size(); j++)
	{
		if (quest[j] >= 'A' && quest[j] <= 'Z') {//알파벳이라면 숫자로 치환
			int realNum = numOfAlphabet[quest[j] - 'A'];
			saveStack.push(realNum);
		}
		else { //연산자라면 계산
			double num2 = saveStack.top();
			saveStack.pop();
			double num1 = saveStack.top();
			saveStack.pop();

			double tempAns;
			if (quest[j] == '*')
				tempAns = num1 * num2;
			else if (quest[j] == '/')
				tempAns = num1 / num2;
			else if (quest[j] == '+')
				tempAns = num1 + num2;
			else
				tempAns = num1 - num2;

			saveStack.push(tempAns);
		}
	}

	// 답 출력
	cout << fixed;
	cout.precision(2);
	cout << saveStack.top() << endl;

	return 0;
}

 

Comments