#include <iostream>
#include <string>
#include <map>
#include <functional>
using namespace std;
#define program(x) int main(
#define staly const
#define i ,
#define oraz i
#define zawiera = {
#define wystarczy }
#define pare(x) { x }
#define jezeli if(
#define to ){
#define inaczej } else {
#define posiada(x) .count(x)
#define funkcja auto
#define zwraca(x) -> x {
#define robi {
#define zwroc return
#define dopoki while(
#define rob ){
#define alias_funkcji(nazwa, nowa) const auto & nowa = nazwa
#define wartosc_slownika(slownik, klucz) slownik.at(klucz)
namespace /* odmiana */{
using napis = string;
using napisow = napis;
}
namespace /* odmiana */{
using liczba = int;
using liczb = liczba;
using liczbe = liczba;
}
namespace /* odmiana */{
using znak = char;
using znakow = znak;
}
auto &pobierz = cin;
auto &wypisz = cout;
auto koniec_linii = '\n';
template<typename Klucz, typename Wartosc>
using slownik = map<Klucz, Wartosc>;
using func_int_int_int = function<int(int, int)>;
namespace /* odmiana */{
using akcja = func_int_int_int;
using akcji = akcja;
}
//...
funkcja potega(liczba podstawa, liczba wykladnik) zwraca(liczbe)
liczba ile_razy = wykladnik;
liczba akumulator = podstawa;
dopoki ile_razy --> 1 rob
akumulator *= podstawa;
wystarczy;
zwroc akumulator;
wystarczy;
alias_funkcji(potega, potege);
program("N-ty kalkulatorek na forum") to
staly slownik<znakow i akcji> slownik_akcji zawiera
pare('+' i [](liczba a oraz
liczba b){ zwroc a + b; }),
pare('-' i [](liczba a oraz
liczba b){ zwroc a - b; }),
pare('^' i [](liczba a oraz
liczba b){ zwroc potege(a, b); })
wystarczy;
liczba a, b;
znak decyzja;
wypisz << "podaj [a] [znak] [b]: " << koniec_linii;
pobierz >> a >> decyzja >> b;
liczba wynik = wartosc_slownika(slownik_akcji, decyzja)(a, b);
wypisz << a << " " << decyzja << " " << b << " = " << wynik << koniec_linii;
wystarczy;
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAojZGVmaW5lIHByb2dyYW0oeCkgaW50IG1haW4oCiNkZWZpbmUgc3RhbHkgY29uc3QKI2RlZmluZSBpICwgCiNkZWZpbmUgb3JheiBpCiNkZWZpbmUgemF3aWVyYSA9IHsKI2RlZmluZSB3eXN0YXJjenkgfQojZGVmaW5lIHBhcmUoeCkgeyB4IH0KI2RlZmluZSBqZXplbGkgaWYoCiNkZWZpbmUgdG8gKXsKI2RlZmluZSBpbmFjemVqIH0gZWxzZSB7CiNkZWZpbmUgcG9zaWFkYSh4KSAuY291bnQoeCkKI2RlZmluZSBmdW5rY2phIGF1dG8KI2RlZmluZSB6d3JhY2EoeCkgLT4geCB7CiNkZWZpbmUgcm9iaSB7CiNkZWZpbmUgendyb2MgcmV0dXJuCiNkZWZpbmUgZG9wb2tpIHdoaWxlKAojZGVmaW5lIHJvYiApewojZGVmaW5lIGFsaWFzX2Z1bmtjamkobmF6d2EsIG5vd2EpIGNvbnN0IGF1dG8gJiBub3dhID0gbmF6d2EKCiNkZWZpbmUgd2FydG9zY19zbG93bmlrYShzbG93bmlrLCBrbHVjeikgc2xvd25pay5hdChrbHVjeikKIApuYW1lc3BhY2UgLyogb2RtaWFuYSAqL3sKICAgIHVzaW5nIG5hcGlzID0gc3RyaW5nOwogICAgdXNpbmcgbmFwaXNvdyA9IG5hcGlzOwp9CiAKbmFtZXNwYWNlIC8qIG9kbWlhbmEgKi97CiAgICB1c2luZyBsaWN6YmEgPSBpbnQ7CiAgICB1c2luZyBsaWN6YiA9IGxpY3piYTsKICAgIHVzaW5nIGxpY3piZSA9IGxpY3piYTsKfQoKbmFtZXNwYWNlIC8qIG9kbWlhbmEgKi97Cgl1c2luZyB6bmFrID0gY2hhcjsKCXVzaW5nIHpuYWtvdyA9IHpuYWs7Cn0KCmF1dG8gJnBvYmllcnogPSBjaW47CmF1dG8gJnd5cGlzeiA9IGNvdXQ7CmF1dG8ga29uaWVjX2xpbmlpID0gJ1xuJzsKIAp0ZW1wbGF0ZTx0eXBlbmFtZSBLbHVjeiwgdHlwZW5hbWUgV2FydG9zYz4KdXNpbmcgc2xvd25payA9IG1hcDxLbHVjeiwgV2FydG9zYz47Cgp1c2luZyBmdW5jX2ludF9pbnRfaW50ID0gZnVuY3Rpb248aW50KGludCwgaW50KT47CgpuYW1lc3BhY2UgLyogb2RtaWFuYSAqL3sKCXVzaW5nIGFrY2phID0gZnVuY19pbnRfaW50X2ludDsKCXVzaW5nIGFrY2ppID0gYWtjamE7Cn0KCi8vLi4uCmZ1bmtjamEgcG90ZWdhKGxpY3piYSBwb2RzdGF3YSwgbGljemJhIHd5a2xhZG5paykgendyYWNhKGxpY3piZSkKICBsaWN6YmEgaWxlX3JhenkgPSB3eWtsYWRuaWs7CiAgbGljemJhIGFrdW11bGF0b3IgPSBwb2RzdGF3YTsKICBkb3Bva2kgaWxlX3JhenkgLS0+IDEgcm9iCiAgICAgIGFrdW11bGF0b3IgKj0gcG9kc3Rhd2E7CiAgd3lzdGFyY3p5OwogIAogIHp3cm9jIGFrdW11bGF0b3I7Cnd5c3RhcmN6eTsKCmFsaWFzX2Z1bmtjamkocG90ZWdhLCBwb3RlZ2UpOwoKCnByb2dyYW0oIk4tdHkga2Fsa3VsYXRvcmVrIG5hIGZvcnVtIikgdG8KICBzdGFseSBzbG93bmlrPHpuYWtvdyBpIGFrY2ppPiBzbG93bmlrX2FrY2ppIHphd2llcmEKICAgIHBhcmUoJysnIGkgW10obGljemJhIGEgb3JheiAKICAgICAgICAgICAgICAgICAgbGljemJhIGIpeyB6d3JvYyBhICsgYjsgfSksCiAgICBwYXJlKCctJyBpIFtdKGxpY3piYSBhIG9yYXoKICAgICAgICAgICAgICAgICAgbGljemJhIGIpeyB6d3JvYyBhIC0gYjsgfSksCiAgICBwYXJlKCdeJyBpIFtdKGxpY3piYSBhIG9yYXoKICAgICAgICAgICAgICAgICAgbGljemJhIGIpeyB6d3JvYyBwb3RlZ2UoYSwgYik7IH0pCiAgd3lzdGFyY3p5OwogIAogIGxpY3piYSBhLCBiOwogIHpuYWsgZGVjeXpqYTsKICAKICB3eXBpc3ogPDwgInBvZGFqIFthXSBbem5ha10gW2JdOiAiIDw8IGtvbmllY19saW5paTsKICBwb2JpZXJ6ID4+IGEgPj4gZGVjeXpqYSA+PiBiOwogIAogIGxpY3piYSB3eW5payA9IHdhcnRvc2Nfc2xvd25pa2Eoc2xvd25pa19ha2NqaSwgZGVjeXpqYSkoYSwgYik7CiAgCiAgd3lwaXN6IDw8IGEgPDwgIiAiIDw8IGRlY3l6amEgPDwgIiAiIDw8IGIgPDwgIiA9ICIgPDwgd3luaWsgPDwga29uaWVjX2xpbmlpOwp3eXN0YXJjenk7