Cod sursa(job #155456)

Utilizator sory1806Sandu Sorina-Gabriela sory1806 Data 11 martie 2008 22:26:15
Problema Evaluarea unei expresii Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<fstream.h>
#include<string.h>
#define max 100000
char x[max], o[max/2];
long v[max/2], n, k=-1, l=-1, i;
ifstream f("evaluare.in");
ofstream g("evaluare.out");

void solve();
void calc();
long det();

int main()
{       f.getline(x, max);
	n=strlen(x);
	solve();
	return 0;
}

void solve()
{       for(i=0; i<n; i++)
	{       switch(x[i])
		{       case '+':
			case '-':
			case '*':
			case '/':
			case '(':
				l++; o[l]=x[i]; break;
			case ')':
				while(o[l]!='(')
				{       calc();
					l--;
				}
				l--;
				break;
			default :
				k++; v[k]=det();
				while(o[l]=='*' || o[l]=='/')
				{	calc(); l--;
				}
				break;
		}
	}
	while(l>=0)
	{       calc(); l--;
	}
	g<<v[0]<<'\n';
}

void calc()
{       switch(o[l])
	{	case '+':
			v[k-1]=v[k-1]+v[k]; k--; break;
		case '-':
			if(k==0)
			{	v[k]=-v[k];
				break;
			}
			v[k-1]=v[k-1]-v[k]; k--; break;
		case '*':
			v[k-1]=v[k-1]*v[k]; k--; break;
		case '/':
			v[k-1]=v[k-1]/v[k]; k--; break;

	}
}

long det()
{	long n;
	n=0;
	while(x[i]<58 && x[i]>47)
	{       n=n*10+(x[i]-'0');
		i++;
	}
	i--;
	return n;
}