Pagini recente » Rating Rusu Florin Andrei (flyingz96) | Cod sursa (job #1629444) | Cod sursa (job #1765580) | Cod sursa (job #2121443) | Cod sursa (job #829048)
Cod sursa(job #829048)
#include<cstring>
#include<cstdio>
#include<fstream>
using namespace std;
char sir2[15],t[100001],sir[3];
int main()
{
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100001],st[100];
int vf=0,i=0,k=0,j=0,nr,st2[100],vf2=0,op1,op2;
f>>s;st[vf]='0';
do
{
if(s[i]=='(')st[++vf]='(';
else if(s[i]>='0'&&s[i]<='9'){
while(s[i]>='0'&&s[i]<='9')
{sir[0]=s[i];strcat(t,sir);i++;}
strcat(t," ");i--;
}
else if(s[i]==')')
{while(st[vf]!='(')
{
sir[0]=st[vf];
strcat(t,sir);
vf--;
}
vf--;}
else if(s[i]=='+'||s[i]=='-')
{if(st[vf]=='+'||st[vf]=='-'||st[vf]=='*'||st[vf]=='/')
{
sir[0]=st[vf];
strcat(t,sir);
st[vf]=s[i];
}
else st[++vf]=s[i];}
else st[++vf]=s[i];
i++;
}
while(i!=strlen(s));
while(vf!=0)
sir2[k++]=st[vf--];
strcat(t,sir2);
while(j!=strlen(t))
{
if(t[j]>='0'&&t[j]<='9')
{
nr=0;
while(t[j]>='0'&&t[j]<='9'){nr=nr*10+(t[j]-'0');j++;}
st2[++vf2]=nr;j--;
}
else if(t[j]!=' ')
{
op1=st2[vf2];
op2=st2[vf2-1];
vf2=vf2-2;
if(t[j]=='+')st2[++vf2]=op1+op2;
else if(t[j]=='-')st2[++vf2]=op2-op1;
else if(t[j]=='/')st2[++vf2]=op2/op1;
else if(t[j]=='*')st2[++vf2]=op2*op1;
}
j++;
}
g<<st2[vf2];
f.close();
g.close();
return 0;
}