3113. Kalkulator z pamięcią

Kod zadania: KCCALC

Napisz program, który działa jak prosty kalkulator z pamięcią obsługujący pięć operacji: dodawanie, odejmowanie, mnożenie, dzielenie i obliczanie reszty z dzielenia liczb całkowitych. Przyjmujemy, że nasz kalkulator ma w pamięci 10 rejestrów o numerach 0 - 9 oraz że wszystkie rejestry zawierają na początku zera.

Wejście

Na wejście programu podana zostanie pewna liczba zestawów danych (co najwyżej 10.000). Każdy z zestawów ma postać:

o a1 a2
gdzie o jest jednoznakowym symbolem operacji do wykonania (+, -, *, /, % i z), a a1 i a2 argumentami tej operacji. Argumenty są albo liczbami całkowitymi (z zakresu od -1.000.000.000 do 1.000.000.000) albo napisami postaci r[i], gdzie i jest liczbą z zakresu 0 - 9. Poszczególne zestawy zostaną rozdzielone znakiem nowej linii.

Wyjście

Na wyjściu programu ma się pojawić ciąg liczb będących rezultatem wykonania pojawiających się na wejściu poleceń. Poszczególne liczby należy rozdzielić znakami nowej linii. To, co należy wykonać, zależy od symbolu operacji. Symbole +, -, *, / i % nakazują wykonanie odpowiednio dodawania, odejmowania, mnożenia, dzielenia i obliczenia reszty z dzielenia liczb będących argumentami operacji. Jeżeli argumentem nie jest liczba, a napis postaci r[i], to przed wykonaniem operacji należy zastąpić go bieżącą wartością rejestru o numerze i. Symbol z nakazuje zapis wartości podanej jako drugi argument w rejestrze o numerze podanym jako pierwszy argument (po wykonaniu tej operacji nie trzeba nic wyświetlać; można założyć, że argumenty operacji z są liczbami całkowitymi). Uwaga! Przyjmujemy, że wynikiem dzielenia oraz resztą z dzielenia przez 0 jest NaN.

Przykład

Wejście:

z 1 2
z 2 2
+ 1 5
* r[2] 6
/ r[1] r[0]
+ 7 r[9]
- 0 4
% 5 -6
Wyjście:

6
12
NaN
7
-4
5

1

Odpowiedzi

2009-11-29T12:06:30+01:00
Na wejście programu podana zostanie pewna liczba zestawów danych (co najwyżej 10.000). Każdy z zestawów ma postać:

o a1 a2
gdzie o jest jednoznakowym symbolem operacji do wykonania (+, -, *, /, % i z), a a1 i a2 argumentami tej operacji. Argumenty są albo liczbami całkowitymi (z zakresu od -1.000.000.000 do 1.000.000.000) albo napisami postaci r[i], gdzie i jest liczbą z zakresu 0 - 9. Poszczególne zestawy zostaną rozdzielone znakiem nowej linii.

Wyjście

Na wyjściu programu ma się pojawić ciąg liczb będących rezultatem wykonania pojawiających się na wejściu poleceń. Poszczególne liczby należy rozdzielić znakami nowej linii. To, co należy wykonać, zależy od symbolu operacji. Symbole +, -, *, / i % nakazują wykonanie odpowiednio dodawania, odejmowania, mnożenia, dzielenia i obliczenia reszty z dzielenia liczb będących argumentami operacji. Jeżeli argumentem nie jest liczba, a napis postaci r[i], to przed wykonaniem operacji należy zastąpić go bieżącą wartością rejestru o numerze i. Symbol z nakazuje zapis wartości podanej jako drugi argument w rejestrze o numerze podanym jako pierwszy argument (po wykonaniu tej operacji nie trzeba nic wyświetlać; można założyć, że argumenty operacji z są liczbami całkowitymi). Uwaga! Przyjmujemy, że wynikiem dzielenia oraz resztą z dzielenia przez 0 jest NaN.
2 1 2