Pagini recente » Cod sursa (job #1214795) | Cod sursa (job #2725591) | Cod sursa (job #2439474) | Cod sursa (job #553816) | Cod sursa (job #2089303)
#include <iostream>
#include <fstream>
#include <string>
#include <stack>
using namespace std;
ifstream fin("soarece.in");
ofstream fout("soarece.out");
stack <int>S;
string A;
int ecif(int ind)
///digit in caiet
{
if('0'<=A[ind]&&A[ind]<='9')
return 1;
else
return 0;
}
int eadun(int ind)
///is_op1 in caiet adica + si -
{
if(A[ind]=='+'||A[ind]=='-')
return 1;
else
return 0;
}
int einmul(int ind)
/// is_op2 in caiet adica * si /
{
if(A[ind]=='*'||A[ind]=='/')
return 1;
else
return 0;
}
int nr(int &ind)
///factor in caiet
{
int r=0;
while(ind<=A.size() && ecif(ind))
{
r=r*10+A[ind]-'0';
ind++;
}
return r;
}
int termen(int &ind)
///ca in caiet
{
int p=nr(ind);
while (ind<=A.size()&&einmul(ind))
{
if(A[ind]=='*')
p*=nr(++ind);
else
p/=nr(++ind);
}
return p;
}
int adunare(int &ind)
{
int a=termen(ind);
while(ind<=A.size()&&eadun(ind))
{
if(A[ind]=='+')
a+=termen(++ind);
else
a-=termen(++ind);
}
return a;
}
//int paranteze(int &ind)
//{
// int j=
//}
int main()
{
fin>>A;
int i=0;
fout<<adunare(i);
return 0;
}