Cod sursa(job #2583199)

Utilizator 1chiriacOctavian Neculau 1chiriac Data 17 martie 2020 21:23:23
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.84 kb
#include <bits/stdc++.h>

using namespace std;
//ifstream fin ("evaluare.in");
//ofstream fout ("evaluare.out");
char sir[10003],stiva[10003];int stiva1[10003],last,last1,nr,nr1;
int main () {
	fin.getline(sir,1000);
	for(int i=0;i<(int)strlen(sir);++i) {
		if(sir[i]>='0' && sir[i]<='9') {
			nr=0;
			while(sir[i]>='0' && sir[i]<='9')
				nr=nr*10+sir[i]-'0',++i;
			stiva1[++last1]=nr;--i;
		}
		else if (sir[i]=='+' || sir[i]=='-') {
			while(stiva[last]=='+' || stiva[last]=='-'  || stiva[last]=='*' || stiva[last]=='/') {
				nr1=stiva1[last1];nr=stiva1[last1-1];last1-=2;
				if(stiva[last]=='+')
					stiva1[++last1]=nr+nr1;
				else if (stiva[last]=='-')
					stiva1[++last1]=nr-nr1;
				else if (stiva[last]=='*')
					stiva1[++last1]=nr*nr1;
				else
					stiva1[++last1]=nr/nr1;
				--last;
			}
			stiva[++last]=sir[i];
		}
		else if (sir[i]=='*' || sir[i]=='/') {
			while(stiva[last]=='*' || stiva[last]=='/') {
				nr1=stiva1[last1];nr=stiva1[last1-1];--last1;--last1;
				if(stiva[last]=='*')
					stiva1[++last1]=nr*nr1;
				else
					stiva1[++last1]=nr/nr1;
				--last;
			}
			stiva[++last]=sir[i];
		}
		else if (sir[i]=='(') 
			stiva[++last]=sir[i];
		else if (sir[i]==')') {
			while(stiva[last]!='(') {
				nr1=stiva1[last1];nr=stiva1[last1-1];last1-=2;
				if(stiva[last]=='+')
					stiva1[++last1]=nr+nr1;
				else if (stiva[last]=='-')
					stiva1[++last1]=nr-nr1;
				else if (stiva[last]=='*')
					stiva1[++last1]=nr*nr1;
				else if (stiva[last]=='/')
					stiva1[++last1]=nr/nr1;
				--last;
			}
			--last;
		}
	}
	while(last>0) {
		nr1=stiva1[last1];nr=stiva1[last1-1];last1-=2;
			if(stiva[last]=='+')
				stiva1[++last1]=nr+nr1;
			else if (stiva[last]=='-')
				stiva1[++last1]=nr-nr1;
			else if (stiva[last]=='*')
				stiva1[++last1]=nr*nr1;
			else if (stiva[last]=='/')
				stiva1[++last1]=nr/nr1;
			--last;
	}
	fout<<stiva1[last1];
	return 0;
}