문제 링크 : https://www.acmicpc.net/problem/1935
피연산자의 개수와 후위 표기식, 피연산자의 값을 주어지면 이에 대한 결과를 출력하는 프로그램
피연산자의 값이 알파벳 대문자로 작성되어있고 그에 대한 값들을 입력받기 때문에 배열에 알파벳과 대응되는 숫자를 넣어둔다. 예를 들어 A = 1이고 배열 arr을 선언해두면 arr[0] = 1, B = 10이면 arr[1] = 10, Z = 3이라면 arr[25] = 3 이다.
이 때 배열에는 연산 결과가 들어가는데, 나눗셈 연산으로 결과값이 실수가 될 수 있기 때문에 배열을 double형으로 선언해야 한다. (float형으로 선언했다가 값의 범위를 벗어났는지 계속 틀렸다고 나와, double형으로 바꿨더니 통과함)
이외에는 후위표기식을 계산하는 방법에 맞춰 스택을 사용하여 계산 결과를 출력함
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main(void)
{
int n; //피연산자 개수
scanf("%d", &n);
int numbers[26] = { 0, };
char command[101];
double a = 0;
double b = 0;
double res = 0;
scanf("%s", command);
for (int i = 0; i < n; i++)
{
scanf("%d", &numbers[i]);
}
double stack[100] = { 0, };
int pos = 0;
int idx = 0;
for (int i = 0; command[i] != NULL ; i++)
{
if ('A' <= command[i] && command[i] <= 'Z')
{
stack[pos++] = numbers[command[i]-'A'];
}
else
{
b = stack[--pos];
a = stack[--pos];
if (command[i] == '+') res = a + b;
else if (command[i] == '-') res = a - b;
else if (command[i] == '*') res = a * b;
else if (command[i] == '/') res = a / b;
stack[pos++] = res;
}
}
printf("%.2f", stack[0]);
}