Pagini recente » Monitorul de evaluare | Statistici Ana maro (anamaro) | Monitorul de evaluare | Cod sursa (job #2107466) | Cod sursa (job #1617366)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char s[100001];
int t, n;
long long numar();
long long op1();
long long op2();
long long op2()
{
long long r=op1();
while(s[t]=='+'||s[t]=='-')
{
if(s[t]=='+')
{
t++;
r=r+op1();
}
else if(s[t]=='-')
{
t++;
r=r-op1();
}
}
return r;
}
long long op1()
{
long long r=numar();
while(s[t]=='*'||s[t]=='/')
{
if(s[t]=='*')
{
t++;
r=r*numar();
}
else if(s[t]=='/')
{
t++;
r=r/numar();
}
}
return r;
}
long long numar()
{
long long nr=0;
if(s[t]=='(')
{
t++;
nr=op2();
t++;
}
else
{
while(s[t]>='0'&&s[t]<='9')
{
nr=nr*10+(s[t]-'0');
t++;
}
}
return nr;
}
int main()
{
fin.getline(s, 1000000);
n=strlen(s);
t=0;
fout<<op2();
fin.close();
fout.close();
return 0;
}
/*
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char s[100001];
int t, n;
long long numar()
{
long long nr=0;
while(s[t]>='0'&&s[t]<='9')
{
nr=nr*10+(s[t]-'0');
t++;
}
return nr;
}
long long op1(long long nr)
{
while(s[t]=='*'||s[t]=='/')
{
if(s[t]=='*')
{
nr=nr*numar();
}
else
{
nr=nr/numar();
}
}
}
long long eval()
{
int v[100001];
char sgn[100001];
int p=1;
long long nr=0;
while(s[t]!=')'&&t<n)
{
if(s[t]>='0'&&s[t]<='9')
{
nr=numar();
v[p]=nr;
p++;
}
if(s[t]=='+'||s[t]=='-')
{
sgn[p]=s[t];
v[p]=nr;
p++;
t++;
}
if(s[t]=='*'||s[t]=='/')
{
v[p]=op1(nr);
p++;
}
if(s[t]=='(')
{
t++;
eval();
t++;
}
}
long long vf=v[1];
for(int i=0;i<=p;i++)
{
cout<<v[i]<<sgn[i];
}
cout<<'\n';
for(int i=1;i<=p;i++)
{
if(sgn[i]=='+')
{
vf=vf+v[i+1];
}
else if(sgn[i]=='-')
{
vf=vf-v[i+1];
}
}
return vf;
}
int main()
{
fin.getline(s, 1000000);
n=strlen(s);
t=0;
fout<<eval();
fin.close();
fout.close();
return 0;
}
*/
/*
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char s[100001];
int t, n;
long long eval()
{
int valori[100001];
char semne[100001];
int p=1, v=1;
while(s[t]!=')'&&t<n)
{
if(s[t]=='+'||s[t]=='-'||s[t]=='*'||s[t]=='/')
{
// cout<<"Caz 1 \n";
semne[p]=s[t];
p++;
t++;
}
else if(s[t]>='0'&&s[t]<='9')
{
// cout<<"Caz 2 \n";
int val=0;
while(s[t]>='0'&&s[t]<='9')
{
val=val*10+(s[t]-'0');
t++;
}
valori[v]=val;
v++;
}
else if(s[t]=='(')
{
// cout<<"Caz 3 \n";
t++;
valori[v]=eval();
t++; //
v++;
}
}
t++;
char saux;
for(int i=1; i<=p; i++) // de la 0?
{
if(semne[i]=='*')
{
semne[i]=saux;
valori[i+1]=valori[i]*valori[i+1];
valori[i]=0;
}
else if(semne[i]=='/')
{
semne[i]=saux;
valori[i+1]=valori[i]/valori[i+1];
valori[i]=0;
}
else
{
saux=semne[i];
}
}
long long vf=0;
int poz=0;
while(valori[poz]==0&&poz<=v)
poz++;
if(poz<v)
{
vf=vf+valori[poz];
for(int i=1; i<=p; i++) // de la 0?
{
if(semne[i]=='+')
{
vf=vf+valori[i+1];
}
else if(semne[i]=='-')
{
vf=vf-valori[i+1];
}
}
}
for(int i=1;i<v;i++)
{
cout<<valori[i]<<semne[i];
}
cout<<"= ";
cout<<vf<<'\n';
return vf;
}
int main()
{
fin.getline(s, 1000000);
n=strlen(s);
t=0;
fout<<eval();
fin.close();
fout.close();
return 0;
}
*/