Pagini recente » Cod sursa (job #997718) | Cod sursa (job #371029) | Cod sursa (job #880339) | Cod sursa (job #158403) | Cod sursa (job #299072)
Cod sursa(job #299072)
#include<fstream.h>
#include<string.h>
int prioritate(char c)
{
if (c=='(') return 0;
if (c=='+' || c=='-') return 1;
if (c=='*'||c=='/') return 2;
return 3;
}
char a1[100000],a2[100000],a3[100000],semn[]="+-*/";
int n2=-1,n3=-1,n;
long b[50000],nr;
int main()
{
ifstream f("polish.in");
ofstream g("polish.out");
int i;
f.get(a1,105);
for(i=0;a1[i];i++)
{
if(a1[i]>='0'&&a1[i]<='9')
{
while(a1[i]>='0'&&a1[i]<='9')
a3[++n3]=a1[i++];
i--;
a3[++n3]=' ';
}
if(a1[i]=='(') a2[++n2]=a1[i];
if(a1[i]==')')
{
while(a2[n2]!='(')
{
a3[++n3]=a2[n2--];
}
n2--;
}
if(strchr(semn,a1[i]))
{
while(prioritate(a1[i])<=prioritate(a2[n2])&&n2>=0)
a3[++n3]=a2[n2--];
a2[++n2]=a1[i];
}
}
while(n2>-1) a3[++n3]=a2[n2--];
for(i=0;i<=n3;i++)
{
if(a3[i]>='0'&&a3[i]<='9')
{
nr=0;
while(a3[i]>='0'&&a3[i]<='9')
nr=nr*10+a3[i++]-'0';
b[++n]=nr;
}
if(strchr(semn,a3[i]))
{
switch(a3[i])
{
case '+':b[n-1]+=b[n--]; break;
case '-':b[n-1]-=b[n--]; break;
case '*':b[n-1]*=b[n--]; break;
case '/':b[n-1]/=b[n--]; break;
}
}
}
cout<<b[n];
f.close();
g.close();
return 0;
}