範例程式碼 uva397

//uva397
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <vector>

using namespace std;

bool first(char c) {
	if (c == '*' || c == '/') return true;
	return false;
}


int main() {
	char var[10], check;
	int opd[25];
	bool opflag[25], nxt = false;
	char opn[25];
	int opcnt, i, j, cnt;
	while (scanf("%d", &opd[0]) != EOF) {
		if (nxt == true) printf("\n");
		cnt = opcnt = 0;
		memset(opflag, false, sizeof(opflag));
		while(1) {
			while (scanf("%c", &check) && check == ' ');
			if (check == '=') {
				scanf("%s",var);
				break;
			}
			else
				opn[opcnt] = check;
			
			scanf("%d", &opd[++opcnt]);
		}

		while (cnt != opcnt) {
			for (i = 0; i <= opcnt; i++) {
				if (opflag[i] == false) {
					printf("%d ", opd[i]);
					if (i != opcnt) printf("%c ", opn[i]);
				}
			}
			printf("= %s\n", var);
			
			for (i = 0; i < opcnt; i++) 
				if (opflag[i] == false && first(opn[i]) == true)
					break;

			if (i == opcnt)
				for (i = 0; i < opcnt; i++)
					if (opflag[i] == false)
						break;

			for (j = i + 1; ; j++)
				if (opflag[j] == false)
					break;

			opflag[i] = true;

			if (opn[i] == '*')
				opd[j] = opd[i] * opd[j];
			else if (opn[i] == '/')
				opd[j] = opd[i] / opd[j];
			else if (opn[i] == '+')
				opd[j] = opd[i] + opd[j];
			else if (opn[i] == '-')
				opd[j] = opd[i] - opd[j];
			cnt++;
		}

		printf("%d = %s\n", opd[j], var);
		nxt = true;
	}
	return 0;
}