Cod sursa(job #2723158)
Utilizator | Data | 13 martie 2021 18:42:27 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 2.4 kb |
//#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
int poz=0,n;
string s;
int numar(){
int nr=0;
while(s[poz]<='9' and s[poz]>='0'){
nr*=10;
nr+=s[poz]-'0';
poz++;
if(poz==n){
return nr;
}
}
return nr;
}
int eval(){
int sum=0,semn=1,prod=1;
while(poz<n){
if(s[poz]=='+'){
semn=1;
poz++;
continue;
}
if(s[poz]=='-'){
semn=-1;
poz++;
continue;
}
if(s[poz]<='9' and s[poz]>='0'){
prod=numar();
while(s[poz]=='*' or s[poz]=='/'){
if(s[poz]=='/'){
poz++;
if(s[poz]=='('){
poz++;
prod/=eval();
}
else{
prod/=numar();
}
}
else{
poz++;
if(s[poz]=='('){
poz++;
prod*=eval();
}
else{
prod*=numar();
}
}
}
sum+=semn*prod;
prod=1;
}
if(s[poz]==')'){
poz++;
return sum;
}
if(s[poz]=='('){
poz++;
prod=eval();
while(s[poz]=='*' or s[poz]=='/'){
if(s[poz]=='/'){
poz++;
if(s[poz]=='('){
poz++;
prod/=eval();
}
else{
prod/=numar();
}
}
else{
poz++;
if(s[poz]=='('){
poz++;
prod*=eval();
}
else{
prod*=numar();
}
}
}
sum+=semn*prod;
prod=1;
}
}
return sum;
}
int main()
{
cin>>s;
n=s.size();
poz=0;
cout<<eval();
return 0;
}
/*
1+2*3+(4+5*6)*(7+8)
*/