Pagini recente » Cod sursa (job #2791025) | Cod sursa (job #115630) | Cod sursa (job #2481141) | Cod sursa (job #76611) | Cod sursa (job #1724277)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream si("evaluare.in");
ofstream so("evaluare.out");
string s;
int poz,n;
int parant();
int numar();
int numar()
{
if(s[poz]=='(')
{
++poz;
return parant();
}
int val=0;
while(s[poz]>='0'&&s[poz]<='9'&&poz<n)
{
val=val*10+s[poz]-'0';
++poz;
}
return val;
}
inline int ec(int a,int b,char s)
{
switch(s)
{
case '+':return a+b;
case '-':return a-b;
case '*':return a*b;
case '/':return a/b;
}
}
int parant()
{
int a,b,c;
char s1,s2;
a=numar();
if(poz==n||s[poz]==')')
{
++poz;
return a;
}
s1=s[poz];
++poz;
b=numar();
if(poz==n||s[poz]==')')
{
++poz;
return ec(a,b,s1);
}
while(poz!=n&&s[poz]!=')')
{
s2=s[poz];
++poz;
c=numar();
if(s1=='*'||s1=='/')
{
a=ec(a,b,s1);
b=c;
s1=s2;
}
else
{
if(s2=='*'||s2=='/')
{
b=ec(b,c,s2);
}
else
{
a=ec(a,b,s1);
b=c;
s1=s2;
}
}
}
a=ec(a,b,s1);
++poz;
return a;
}
int main()
{
si>>s;
n=s.size();
so<<parant();
so.close();
return 0;
}