Pagini recente » Cod sursa (job #2773057) | Cod sursa (job #2225622) | Cod sursa (job #421701) | Cod sursa (job #2800681) | Cod sursa (job #2768921)
#include <iostream>
#include<fstream>
#include<cstring>
#include<stack>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
stack<int> S1; stack<char> S2;
void Out( stack < int > S1 ){
while( S1.size() ){
cout << S1.top() << ' ';
S1.pop();
}
cout << '\n';
}
void Out( stack < char > S1 ){
while( S1.size() ){
cout << S1.top() << ' ';
S1.pop();
}
cout << '\n';
}
int main(){
int num =0, k=0; char c, s[100005], V[100005];
fin >> s;
///(1+1)*13+10/2
for(int i=0; i<strlen(s); i++){
if(!(s[i]>='0' && s[i]<='9')) V[++k] = s[i];
}
int num1=0, num2=0, in =0;
//cout << s << '\n';
for(int i=0; i<strlen(s); i++){
if( !(s[i] >= '0' && s[i] <= '9') )
in++;
//cout << s[i] << ' ' << in << '\n';
if(s[i] == '('){
S2.push(s[i]);//in ++;
}
else if( s[i]>='0' && s[i]<='9' ){
num1 = 0;
while( s[i]>='0' && s[i]<='9' ){
num1 *=10; num1 += (s[i]-'0');
i++;
}
i--;
S1.push(num1);
}
else if( s[i] == '*'){
//in ++;
if(s[i+1] != '('){
i++;
num2 = 0;
while( s[i]>='0' && s[i]<='9' ){
num2 *=10; num2+=(s[i] -'0');
i++;
}
i--;
int num = S1.top() * num2;
S1.pop(); S1.push(num);
}
else{
S2.push('*');
}
}
else if( s[i] == '/'){
//in++;
if(s[i+1] != '('){
i++;
num2 = 0;
while( s[i]>='0' && s[i]<='9' ){
num2 *=10; num2+=(s[i] -'0');
i++;
}
i--;
int num = S1.top() / num2;
S1.pop(); S1.push(num);
}
else{
S2.push('/');
}
}
else if(s[i] == '+'){
//in++;
if(V[in+1] != '*' && V[in+1] != '/' && V[in+1] != '('){
num2 = 0;
i++;
while( s[i]>='0' && s[i]<='9' ){
num2 *=10; num2+=(s[i] -'0');
i++;
}
i--;
int num = S1.top() + num2;
S1.pop(); S1.push(num);
}
else{
S2.push('+');
}
}
else if(s[i] == '-'){
//in++;
if(V[in+1] != '*' && V[in+1] != '/' && V[in+1] != '('){
num2 = 0;
i++;
while( s[i]>='0' && s[i]<='9' ){
num2 *=10; num2+=(s[i] -'0');
i++;
}
i--;
int num = S1.top() - num2;
S1.pop(); S1.push(num);
}
else{
S2.push('-');
}
}
else if(s[i] == ')'){
//in++;
while(S2.top() != '('){
if(S2.top() == '+'){
int num = S1.top();
S1.pop(); num+= S1.top(); S1.pop(); S1.push(num);
}
else if(S2.top() == '-'){
int num = S1.top();
S1.pop(); num = S1.top() - num; S1.pop(); S1.push(num);
}
S2.pop();
}
S2.pop();
if(!S2.empty() && S2.top() =='*'){
int num = S1.top();
S1.pop(); num *=S2.top(); S2.pop(); S2.push(num);
S2.pop();
}
else if(!S2.empty() && S2.top() =='/'){
int num = S1.top();
S1.pop(); num =S2.top() /num; S2.pop(); S2.push(num);
S2.pop();
}
}
//cout << s[i] << ":\n";
//Out( S1 );
//Out( S2 );
}
while( !S2.empty()){
if(S2.top() == '+'){
int num = S1.top();
S1.pop(); num+= S1.top(); S1.pop(); S1.push(num);
}
else if(S2.top() == '-'){
int num = S1.top();
S1.pop(); num = S1.top() - num; S1.pop(); S1.push(num);
}
S2.pop();
}
fout << S1.top() ;
return 0;
}