Pagini recente » Cod sursa (job #1261801) | Cod sursa (job #2390674) | Cod sursa (job #2647154) | Cod sursa (job #1831082) | Cod sursa (job #2734312)
#include<bits/stdc++.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char c,semn[1000000],st[10000];
int i,n,k,nr,gasitnr,fp[100000];
long long stiv[100];
int main()
{
while(f>>c)
{
if(c>='0' && c<='9')
{ gasitnr=1; nr=nr*10+(c-48); }
else
{
if(gasitnr)
{
n++;
fp[n]=nr;
nr=0;
gasitnr=0;
}
if(c=='(' || c=='+' || c=='-' || c=='/' || c=='*')
{
k++;
st[k]=c;
if(st[k]=='+' || st[k]=='-')
{
while(st[k-1]=='+' || st[k-1]=='-' || st[k-1]=='*' || st[k-1]=='/')
{
n++;
semn[n]=st[k-1];
st[k-1]=st[k];
k--;
}
}
else
if(st[k]=='*' || st[k]=='/')
{
while(st[k-1]=='*' || st[k-1]=='/')
{
n++;
semn[n]=st[k-1];
st[k-1]=st[k];
k--;
}
}
}
else
if(c==')')
{
while(st[k]!='(')
{
n++;
semn[n]=st[k];
k--;
}
k--;
}
}
}
if(gasitnr)
{
n++;
fp[n]=nr;
nr=0;
gasitnr=0;
}
while(k)
{
n++;
semn[n]=st[k];
}
k=0;
for(int i=1; i<=n; i++)
{
if(semn[i]!='+' && semn[i]!='-' && semn[i]!='*' && semn[i]!='/')
{
k++;
stiv[k]=fp[i];
}
else
{
switch(semn[i])
{
case '+': stiv[k-1]=stiv[k-1]+stiv[k]; break;
case '-': stiv[k-1]=stiv[k-1]-stiv[k]; break;
case '*': stiv[k-1]=stiv[k-1]*stiv[k]; break;
case '/': stiv[k-1]=stiv[k-1]/stiv[k]; break;
}
k--;
}
}
g<<stiv[1];
g.close();
f.close();
return 0;
}