Pagini recente » Cod sursa (job #1040338) | Cod sursa (job #693073) | Cod sursa (job #759315) | Cod sursa (job #1683858) | Cod sursa (job #1667383)
#include <fstream>
#include <cstring>
#include <iostream>
using namespace std;
char v[100010],i;
int n;
int eval();
int produs(int st)
{
int nr=0,j=1,s=1;
s=st;
while(v[i]!=')' && i<n && v[i]!='+' && v[i]!='-')
{
if(v[i]=='*')
{
i++;
if(v[i]<='9' && v[i]>='0')
{
nr=0;
while(v[i]<='9' && v[i]>='0')
{
nr=nr*10+v[i]-'0';
i++;
}
s*=nr;
}
else if(v[i]=='(')
{
s*=eval();
}
}
else
{
i++;
if(v[i]<='9' && v[i]>='0')
{
nr=0;
while(v[i]<='9' && v[i]>='0')
{
nr=nr*10+v[i]-'0';
i++;
}
j*=nr;
}
else if(v[i]=='(')
{
i++;
j*=eval();
}
}
}
return s/j;
}
int eval()
{
int nr=0,ok=1,s=0;
while(i<n && v[i]!=')')
{
if((v[i]<='9' && v[i]>='0' ) || v[i]=='+' || v[i]=='-')
{
nr=0;
if(v[i]=='-')
ok=-1;
else
ok=1;
if(v[i]=='+' || v[i]=='-')
i++;
while(v[i]<='9' && v[i]>='0')
{
nr=nr*10+v[i]-'0';
i++;
}
nr*=ok;
}
if(v[i]=='*' || v[i]=='/')
{
s+=produs(nr);
}
else if(v[i]=='(')
{
++i;
nr+=eval()*ok;
}
else
s+=nr;
}
i++;
return s;
}
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int main()
{
f.getline(v,1000010);
n=strlen(v);
cout<<eval();
}