Pagini recente » Cod sursa (job #1548525) | Cod sursa (job #3030633) | Cod sursa (job #1373852) | Cod sursa (job #2597192) | Cod sursa (job #607838)
Cod sursa(job #607838)
#include<fstream>
using namespace std;
char s[100002],cp[100002];
char aux[10];
ofstream g("evaluare.out");
void conv(long nr1)
{int k=0,nr=0;aux[0]=0;
if(nr1<0){ s[0]='-';k++; }
while(nr1){nr=nr*10+nr1%10;nr1/=10;}
while(nr)
{
if(nr%10==0)aux[k]='0';
if(nr%10==1)aux[k]='1';
if(nr%10==2)aux[k]='2';
if(nr%10==3)aux[k]='3';
if(nr%10==4)aux[k]='4';
if(nr%10==5)aux[k]='5';
if(nr%10==6)aux[k]='6';
if(nr%10==7)aux[k]='7';
if(nr%10==8)aux[k]='8';
if(nr%10==9)aux[k]='9';
nr/=10;
k++;
}
(aux+k)[0]=0;
}
long termens(int k)
{int nr=0,nr1=0;
while(s[k]<='9' && s[k]>='0') k--;
k++;
while(s[k]<='9' && s[k]>='0') { nr=nr*10+s[k]-'0'; k++; }
return nr;
}
long termend(int k)
{int nr=0;
while(s[k]<='9' && s[k]>='0') { nr=nr*10+s[k]-'0'; k++; }
return nr;
}
long eval(int pozs,int pozd)
{long rez1,rez2,i,is=0,id=0;
for(i=pozs;i<pozd;i++)
if(s[i]=='*' || s[i]=='/')
{
rez1=termens(i-1);
for(is=i-1;is>=0 && s[is]<='9' && s[is]>='0';is--);
rez2=termend(i+1);
for(id=i+1;id<strlen(s) && s[id]<='9' && s[id]>='0';id++);
aux[0]=0;
if(s[i]=='*')conv(rez1*rez2);
if(s[i]=='/')conv(rez1/rez2);
cp[0]=0;
strcpy(cp,s+id);
(s+is+1)[0]=0;
strcpy(s+is+1,aux);
strcat(s,cp);
pozd=pozd-(id-is)+strlen(aux)+1;
i=is;
if(i<0)i=0;
}
//adunare
for(i=pozs;i<pozd;i++)
if(s[i]=='+' || s[i]=='-')
{
rez1=termens(i-1);
for(is=i-1;is>=0 && s[is]<='9' && s[is]>='0';is--);
rez2=termend(i+1);
for(id=i+1;id<strlen(s) && s[id]<='9' && s[id]>='0';id++);
aux[0]=0;
if(s[i]=='+')conv(rez1+rez2);
if(s[i]=='-')conv(rez1-rez2);
cp[0]=0;
strcpy(cp,s+id);
(s+is+1)[0]=0;
strcpy(s+is+1,aux);
strcat(s,cp);
pozd=pozd-(id-is)+strlen(aux)+1;
i=is;
if(i<0)i=0;
}
return atol(s);
}
void par()
{ int pozs,pozd,ps,i,k=0;
for(i=0;i<strlen(s);i++)
if(s[i]=='(') k++;
while(k)
{
for(i=0;i<strlen(s);i++) if(s[i]=='(')pozs=i;
strcpy( s+pozs ,s+pozs+1 ); ps=pozs;
for(pozd=pozs; s[pozd]!=')' ;pozd++);
strcpy( s+pozd ,s+pozd+1 );
pozs=ps;
eval( pozs ,pozd-1);
k--;
}
int x=strlen(s);
g<<eval(0,x);
}
int main()
{
ifstream f("evaluare.in");
f.getline(s,1001);
par();
f.close();g.close();
return 0;}