#include <iostream>
using namespace std;
class Unarizer
{
public:
string unarize(int n, int base)
{
_n = n;
_base = base;
_len = 0;
_unarize();
if(_len > 100)
return "NIE";
return _exp;
}
int length(){return _len;}
private:
string _exp;
int _len;
int _base;
int _n;
void _unarize()
{
int dig = _n % _base;
_n /= _base;
if(dig > 0 && _n > 0)
_exp += '(';
_digit(dig);
if(_n == 0)
return;
if(dig > 0)
_exp += '+';
_exp += '(';
_digit(_base);
_exp += ')';
_exp += '*';
_unarize();
if(dig > 0)
_exp += ')';
}
//dopisuje do wyrazenia liczbe n w postaci sumy jedynek
void _digit(int n)
{
if(n > 0)
{
_len += n--;
_exp += '1';
while(n-- > 0)
_exp += "+1";
}
}
};
int main()
{
ios_base::sync_with_stdio(0);
int t,n;
cin>>t;
while(t--)
{
cin>>n;
Unarizer u;
string ans;
int b = 2;
do{
ans = u.unarize(n, b);
b++;
}while(ans == "NIE" && b <= 8);
cout<<ans<<'\n';
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include <iostream> using namespace std; class Unarizer { public: string unarize(int n, int base) { _n = n; _base = base; _len = 0; _unarize(); if(_len > 100) return "NIE"; return _exp; } int length(){return _len;} private: string _exp; int _len; int _base; int _n; void _unarize() { int dig = _n % _base; _n /= _base; if(dig > 0 && _n > 0) _exp += '('; _digit(dig); if(_n == 0) return; if(dig > 0) _exp += '+'; _exp += '('; _digit(_base); _exp += ')'; _exp += '*'; _unarize(); if(dig > 0) _exp += ')'; } //dopisuje do wyrazenia liczbe n w postaci sumy jedynek void _digit(int n) { if(n > 0) { _len += n--; _exp += '1'; while(n-- > 0) _exp += "+1"; } } }; int main() { ios_base::sync_with_stdio(0); int t,n; cin>>t; while(t--) { cin>>n; Unarizer u; string ans; int b = 2; do{ ans = u.unarize(n, b); b++; }while(ans == "NIE" && b <= 8); cout<<ans<<'\n'; } return 0; } |
English