Cod sursa(job #2656985)
Utilizator | Data | 9 octombrie 2020 13:05:34 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 60 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 2.6 kb |
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
int ind,n;
string s;
bool cifra(){
if(ind==n)
return false;
char a=s[ind];
if(a<='9' and a>='0')
return true;
return false;
}
long long numar(){
int sum=0;
while(cifra()==true){
sum*=10;
sum+=s[ind]-'0';
ind++;
}
return sum;
}
long long eval(){
int sum=0,prod=1,semn=1;
while(ind<n){
//cout<<"|"<<ind<<"|";
//cout<<sum<<"\n";
if(s[ind]==')'){
ind++;
return sum;
}
if(s[ind]=='+'){
semn=1;
ind++;
continue;
}
if(s[ind]=='-'){
semn=-1;
ind++;
continue;
}
if(cifra()==true){
prod=numar();
//cout<<prod<<"\n";
while(s[ind]=='*' or s[ind]=='/'){
if(s[ind]=='*'){
ind++;
if(s[ind]=='('){
ind++;
prod*=eval();
}
else{
prod*=numar();
}
}
else{
if(s[ind]=='/'){
ind++;
if(s[ind]=='('){
ind++;
prod/=eval();
}
else{
prod/=numar();
}
}
}
}
//cout<<prod<<"\n"<<sum<<"\n\n\n";
sum+=semn*prod;
continue;
}
if(s[ind]=='('){
ind++;
prod=eval();
if(s[ind]=='*'){
ind++;
if(s[ind]=='('){
ind++;
prod*=eval();
}
else{
prod*=numar();
}
}
else{
if(s[ind]=='/'){
ind++;
if(s[ind]=='('){
ind++;
prod/=eval();
}
else{
prod/=numar();
}
}
}
sum+=semn*prod;
continue;
}
}
return sum;
}
int main()
{
cin>>s;
n=s.size();
ind=0;
cout<<eval();
return 0;
}