Pagini recente » Cod sursa (job #941079) | Cod sursa (job #1181418) | Cod sursa (job #726285) | Cod sursa (job #1885856) | Cod sursa (job #282898)
Cod sursa(job #282898)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define NR 100001
FILE *f, *g;
char a[NR], v[NR], st[NR];
long i, n, r, k, sw, j, stn[NR], q;
int main(void)
{
f=fopen("evaluare.in", "r");
g=fopen("evaluare.out", "w");
fgets(v, 100001, f);
n=strlen(v)-1;
k=0;
for (i=0;i<=n;i++)
if (isdigit(v[i]))
{
while (isdigit(v[i]))
a[r++]=v[i++];
a[r++]=' ';
i--;
}
else
{
sw=0;
if (v[i]=='(')
{
sw=1;
st[++k]=v[i];
}
if (v[i]==')')
{
while (st[k]!='(')
{
a[r++]=st[k--];
a[r++]=' ';
st[k+1]='\0';
}
st[k--]='\0';
}
if (v[i]=='+'&&st[k]!='+'&&st[k]!='*'&&st[k]!='/')
{
st[++k]=v[i];
continue;
}
if (v[i]=='-'&&st[k]!='-'&&st[k]!='*'&&st[k]!='/')
{
st[++k]=v[i];
continue;
}
if (v[i]=='*'||v[i]=='/')
{
st[++k]=v[i];
continue;
}
if (v[i]=='+'&&(st[k]=='+'||st[k]=='*'||st[k]=='/'))
{
while (st[k]=='+'||st[k]=='*'||st[k]=='/')
{
a[r++]=st[k];
st[k--]='\0';
a[r++]=' ';
}
st[++k]=v[i];
}
if (v[i]=='-'&&(st[k]=='-'||st[k]=='*'||st[k]=='/'))
{
while (st[k]=='-'||st[k]=='*'||st[k]=='/')
{
a[r++]=st[k];
st[k--]='\0';
a[r++]=' ';
}
st[k]=v[i];
}
if (i==n)
for (j=k;j>0;j--)
{
a[r++]=st[j];
a[r++]=' ';
st[j]='\0';
}
}
k=0;
r-=2;
for (i=0;i<=r;i++)
if (isdigit (a[i]))
{
q=0;
while (isdigit(a[i]))
{
q=10*q+a[i]-48;
i++;
}
stn[++k]=q;
}
else
{
if (a[i]=='+')
stn[k-1]=stn[k]+stn[k-1];
if (a[i]=='-')
stn[k-1]=stn[k-1]-stn[k];
if (a[i]=='*')
stn[k-1]=stn[k-1]*stn[k];
if (a[i]=='/')
stn[k-1]=stn[k-1]/stn[k];
stn[k--]=0;
i++;
}
fprintf(g, "%ld", stn[1]);
fcloseall();
return 0;
}