Cod sursa(job #779104)

Utilizator stefanzzzStefan Popa stefanzzz Data 16 august 2012 17:30:55
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");

char s[100005];
int cnt,a,lg;

long eval_expresie();
long eval_termen();
long eval_factor();

int main()
{
    f.getline(s,100003,'\n');
    lg=strlen(s);
    a=eval_expresie();
    g<<a<<'\n';
    f.close();
    g.close();
    return 0;
}

long eval_expresie(){
    long S;
    S=eval_termen();
    while(cnt<lg&&(s[cnt]=='+'||s[cnt]=='-')){
        cnt++;
        if(s[cnt-1]=='+')
            S+=eval_termen();
        else
            S-=eval_termen();}
    cnt++;
    return S;}

long eval_termen(){
    long p;
    p=eval_factor();
    while(cnt<lg&&(s[cnt]=='*'||s[cnt]=='/')){
        cnt++;
        if(s[cnt-1]=='*')
            p*=eval_factor();
        else
            p/=eval_factor();}
    return p;}

long eval_factor(){
    switch(s[cnt]){
        case '(':
            cnt++;
            return eval_expresie();
        case '-':
            cnt++;
            a=0;
            while(s[cnt]>='0'&&s[cnt]<='9'){
                a=a*10+(s[cnt]-'0');
                cnt++;}
            return -a;
        default:
            a=s[cnt++]-'0';
            while(s[cnt]>='0'&&s[cnt]<='9'){
                a=a*10+s[cnt]-'0';
                cnt++;}
            return a;}}