Open murry2018 opened 3 years ago
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include <stdio.h>
using namespace std;
#define MAX_N 200
int top;
int stack[MAX_N];
void stackInit(void)
{
top = -1;
}
int stackIsEmpty(void)
{
return (top == -1);
}
int stackIsFull(void)
{
return (top == MAX_N - 1);
}
int stackPush(int value)
{
if (stackIsFull())
{
printf("stack overflow!");
return 0;
}
top++;
stack[top] = value;
return 1;
}
int stackPop(int* value)
{
if (stackIsEmpty())
{
printf("stack is empty!");
return 0;
}
*value = stack[top];
top--;
return 1;
}
int main(int argc, char** argv)
{
int test_case;
int T;
//freopen("input.txt", "r", stdin);
//cin >> T;
T = 10;
for (test_case = 1; test_case <= T; ++test_case)
{
int num;
char in[200];
char post[200] = { 0, };
stackInit();
scanf("%d", &num);
scanf("%s", in);
int i = 0;
int j = 0;
int data;
while (in[i])
{
if (in[i] >= '0' && in[i] <= '9')
{
post[j] = in[i];
j++;
}
else
{
switch (in[i])
{
case '(':
stackPush(in[i]);
break;
case '+':
if (stack[top] == '+' || stack[top] == '*')
{
stackPop(&data);
post[j] = data;
j++;
}
stackPush(in[i]);
break;
case '*':
if (stack[top] == '*')
{
stackPop(&data);
post[j] = data;
j++;
}
stackPush(in[i]);
break;
case ')':
while (stack[top] != '(')
{
stackPop(&data);
post[j] = data;
j++;
}
stackPop(&data);
break;
}
}
i++;
}
while (!stackIsEmpty())
{
stackPop(&data);
post[j] = data;
j++;
}
int result = 0;
int tmp = 0;
i = 0;
while (post[i])
{
if (post[i] >= '0' && post[i] <= '9')
{
stackPush(post[i] - 48);
}
if (post[i] == '+')
{
stackPop(&data);
tmp = data;
stackPop(&data);
tmp = tmp + data;
stackPush(tmp);
}
if (post[i] == '*')
{
stackPop(&data);
tmp = data;
stackPop(&data);
tmp = tmp * data;
stackPush(tmp);
}
i++;
}
printf("#%d %d\n", test_case, stack[top]);
}
return 0;
}
계산기 코드
SWEA 1222, 1223, 1224 모두 같은 코드로 풀었습니다.