Cod sursă (job #339406)

Utilizator avatar PredaBoss Preda Andrei PredaBoss IP ascuns
Problemă Bizar (clasele 9-10) Compilator cpp | 1,09 kb
Rundă Arhiva de probleme Status evaluat
Dată 13 ian. 2018 18:47:44 Scor 0
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bizar.in");
ofstream fout("bizar.out");
int i,k[10000],j,v[100][50000],p[10000];
char a[100000];
int termen()
{
    int n=0;
    while(a[i]-'0'>=0 && a[i]-'0'<=9)
    {
        n=n*10+a[i]-'0';
        i++;
    }
    return n;
}
int calcul()
{
    while(a[i]!='\0' && a[i]!=')')
    {
        if(a[i]-'0'>=0 && a[i]-'0'<=9)
        {
            p[j]++;
            v[j][p[j]]=termen();
        }
        else
        {
            if(a[i]=='(')
            {
                j++;
                k[j]=v[j-1][p[j-1]];
                i++;
                v[j-1][p[j-1]]=calcul();
                j--;
            }
            else
            {
                i++;
            }
        }
    }
    if(a[i+1]=='(')
    {
        i+=2;
        k[j]=v[j][k[j]%p[j]];
        p[j]=0;
        return calcul();
    }
    else
    {
        v[j][0]=v[j][p[j]];
        return v[j][k[j]%p[j]];
    }
}
int main()
{
    fin.get(a,100000);
    k[0]=a[0]-'0';
    i=2;
    fout<<calcul();
    return 0;
}