데이터 구조 식 값 구하 기1

23756 단어
한 표현 식 에 서 는 "(") "," 0 - 9 "," + "," - "," * "," / "," ^ "만 표현 식 값 을 요청 합 니 다.("/" 정수 로 나 누 기).
입력 형식: 총 1 줄, 산식 입 니 다.(산식 길이 < = 30 그 중 모든 데 이 터 는 0 ~ 2 ^ 31 - 1 범위 내).
출력 형식: 표현 식 의 값 입 니 다.
샘플 입력: 여기에 입력 그룹 을 드 립 니 다.예 를 들 면:
1 + (3 + 2) (7 ^ 2 + 69) / (2) 출력 사례: 여기에 해당 하 는 출력 을 드 립 니 다.예 를 들 면:
258
나의 답
#include
#include
#include
#include
#define maxsize 310

bool isNum(char ch);
int Calculate(int a, char str, int b);
bool CompareChar(char a, char b);

int main()
{
	char ch[maxsize];
	int num[maxsize];
	char str[maxsize];
	int i = 0;

    
	gets(ch);
	int topn, topc;
	topn = 0;
	topc = 0;

    
	for (int i = 0; i < 310; i++)
	{
		num[i] = 0;
		str[i] = '0';
	}

	while (i < strlen(ch))
	{
		if (isNum(ch[i]))
		{		
			while (isNum(ch[i]))
			{
				num[topn] = num[topn] * 10 + (ch[i++] - '0');
			}
			topn++;
			continue;
		}
		else
		{
			if (ch[i] == '(')  str[topc++] = ch[i];
			else if (ch[i] == ')')
			{
				while (str[topc - 1] != '(')
				{

					num[topn - 2] = Calculate(num[topn - 2], str[topc - 1], num[topn - 1]);
					num[topn - 1] = 0;
					topc--;
					topn--;
				}
				topc--;
			}
			else
			{
				if (topc == 0) str[topc++] = ch[i];         
				else if (CompareChar(ch[i], str[topc - 1]))        str[topc++] = ch[i];
				
				else
				{
		
					while (!CompareChar(ch[i], str[topc - 1]))
					{
						if (str[topc - 1] == '(')	break;

						num[topn - 2] = Calculate(num[topn - 2], str[topc - 1], num[topn - 1]);
						num[topn - 1] = 0;
						topc--;
						topn--;

						if (topc == 0)	break;
					}
					str[topc++] = ch[i];
				}
			}
		}
		i++;
	}

	while (topn != 1 && topc > 0) 
	{
		num[topn - 2] = Calculate(num[topn - 2], str[topc - 1], num[topn - 1]);
		topn--;
		topc--;
	}
	printf("%d", num[0]);
}

bool isNum(char ch)
{
	if (ch <= '9' && ch >= '0')  return true;
	else return false;
}

int Calculate(int a, char str, int b)
{
	if (str == '*')       return a * b;
	else if (str == '/')  return a / b;
	else if (str == '-')  return a - b;
	else if (str == '+')  return a + b;
	else                  return pow(a, b);
}

bool CompareChar(char a, char b)
{
	int x = 0; 
	int y = 0; 

	if (a == '+' || a == '-')       x = 1;
	else if (a == '*' || a == '/')  x = 2;
	else if (a == '^')              x = 3;
	else if (a == '(')              x = 4;
	if (b == '+' || b == '-')       y = 1;
	else if (b == '*' || b == '/')  y = 2;
	else if (b == '^')              y = 3;
	else if (b == '(')              y = 4;

	if (x > y)                      return true;
	else                            return false;
}

좋은 웹페이지 즐겨찾기