Pagini recente » Cod sursa (job #1300210) | Cod sursa (job #2374014) | Cod sursa (job #1226415) | Cod sursa (job #1501998) | Cod sursa (job #680841)
Cod sursa(job #680841)
/*
w/o ( support . for tests
*/
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main()
{
string expr;
unsigned long rezultat = 0;
freopen("evaluare.in", "r", stdin);
while(!feof(stdin))
expr.push_back(fgetc(stdin));
fclose(stdin);
string::iterator it;
int num, num2;
char len[32], len2[32];
char op = '+';
size_t sl, s2;
for(it=expr.begin();it<expr.end();++it)
if(*it >= '0' || *it <= '9')
{
num = atoi(&*it);
sprintf(len, "%d", num);
sl = strlen(len);
if((it + sl) < expr.end())
it += sl;
if(strchr("*/", *it))
{
if(*it == '*')
{
num2 = atoi(&*(it + 1));
sprintf(len2, "%d", num2);
s2 = strlen(len2);
if(op == '+')
rezultat += (num * num2);
else if(op == '-')
rezultat -= (num * num2);
else if(op == '/')
rezultat /= (num * num2);
else if(op == '*')
rezultat *= (num * num2);
if((it + 1 + s2) < expr.end())
it += s2 + 1;
}
else if(*it == '/')
{
num2 = atoi(&*(it + 1));
sprintf(len2, "%d", num2);
s2 = strlen(len2);
if(op == '+')
rezultat += (num / num2);
else if(op == '-')
rezultat -= (num / num2);
else if(op == '/')
rezultat /= (num / num2);
else if(op == '*')
rezultat *= (num / num2);
if((it + 1 + s2) < expr.end())
it += s2 + 1;
}
}
else if(op == '+')
rezultat += num;
else if(op == '-')
rezultat -= num;
op = *it;
}
else if(strchr("+*-/", *it))
op = *it;
expr.clear();
freopen("evaluare.out", "w", stdout);
cout<<rezultat<<"\n";
fclose(stdout);
return 0;
}