본문 바로가기

TEST/자료구조와 함께 배우는 알고리즘 입문(C언어)

후위연산

#include<stdio.h>

int main(void)
{
	char hahaha1[100] = { 0, };
	char huwi[100] = { 0, };
	char sik[100] = { 0, };
	int huwi_num = 0;
	int sik_num = 0;
	int hahaha2=0;
	int cal[100] = { 0, }, num=0;
	printf("계산식을 입력하세요>> ");
	scanf_s("%s", hahaha1,sizeof(hahaha1));
	while(hahaha1[hahaha2]) {
		switch (hahaha1[hahaha2]) {
		case '(':
			sik[sik_num] = '(';
			sik_num++;
			break;
		case ')':{
			while (1) {
				if (sik[sik_num - 1] != '(') {
					huwi[huwi_num] = sik[sik_num - 1];
					sik_num--;
					huwi_num++;
				}
				else if (sik[sik_num - 1] == '(')
				{
					sik_num--;
					break;
				}
			}
			}
			break;
		case '+':
			if (sik[sik_num - 1] == '-') {
				huwi[huwi_num] = '-';
				sik[sik_num - 1] = '+';
				huwi_num++;
			}
			else if (sik[sik_num - 1] == '+') {
				huwi[huwi_num] = '+';
				huwi_num++;
			}
			else if(sik[sik_num - 1] == '*' || sik[sik_num - 1] == '/') {
				huwi[huwi_num] = sik[sik_num - 1];
				huwi_num++;
				sik[sik_num-1] = '+';
			}
			else {
				sik[sik_num] = '+';
				sik_num++;
			}
			break;
		case '-':
			if (sik[sik_num - 1] == '+') {
				huwi[huwi_num] = '+';
				sik[sik_num - 1] = '-';
				huwi_num++;
			}
			else if (sik[sik_num - 1] == '-') {
				huwi[huwi_num] = '-';
				huwi_num++;
			}
			else if (sik[sik_num - 1] == '*' || sik[sik_num - 1] == '/') {
				huwi[huwi_num] = sik[sik_num - 1];
				huwi_num++;
				sik[sik_num - 1] = '-';
			}
			else {
				sik[sik_num] = '-';
				sik_num++;
			}
			break;
		case '*':
			if (sik[sik_num - 1] == '*' || sik[sik_num - 1] == '/') {
				huwi[huwi_num] = sik[sik_num-1];
				sik_num--;
				huwi_num++;
			}
			else {
				sik[sik_num] = hahaha1[hahaha2];
				sik_num++;

			}
			break;
		case '/':
			if (sik[sik_num - 1] == '*' || sik[sik_num - 1] == '/') {
				huwi[huwi_num] = sik[sik_num - 1];
				huwi_num++;
			}
			else {
				sik[sik_num] = hahaha1[hahaha2];
				sik_num++;
			}
			break;
		default:
			huwi[huwi_num] = hahaha1[hahaha2];
			huwi_num++;
			break;
		}
	hahaha2++;
	}
	sik_num--;
	while(sik_num>=0) {
		huwi[huwi_num] = sik[sik_num];
		huwi_num++;
		sik_num--;
	}
	huwi_num--;
	printf("\n후위표기식 결과>> ");
	for (int yeok=0; yeok<=huwi_num; yeok++) {
		printf("%c", huwi[yeok]);
		
		if (huwi[yeok] == '+') {
			cal[num - 2] += cal[num-1];
			num--;
		}
		else if (huwi[yeok] == '-') {
			cal[num - 2] -= cal[num-1];
			num--;
		}
		else if (huwi[yeok] == '*') {
			cal[num - 2] *= cal[num-1];
			num--;
		}
		else if (huwi[yeok] == '/') {
			cal[num - 2] /= cal[num-1];
			num--;
		}
		else {
			cal[num] = huwi[yeok] - 48;
			num++;
		}
	}
	printf("\n\n계산결과 >> %d", cal[0]);
}