#include <cstdio>
#include <vector>
#include <string>
#include <stack>
int main()
{
int t;
scanf("%d",&t);
for(int i=0;i<t;i++)
{
int k;
scanf("%d",&k);
if(k)
{
std::string a="";
std::vector <int> dane;
while(k>0)
{
dane.push_back(k%3);
k/=3;
}
for(int j=0;true;j++)
{
if(dane.at(j))
{
a+="1";
if(dane.at(j)==2)
a+="+1";
if(j==dane.size()-1)
break;
else
a+="+";
}
else if(j==dane.size()-1)
break;
a+="(1+1+1)*(";
}
for(int j=0;j<dane.size()-1;j++)
a+=")";
int b=a.find("(1)");
while(b!=-1)
{
b=a.find("(1)");
if(a[b-1]=='*' || a[b-1]=='+')
a.erase(b-1,4);
else
a.erase(b,3);
b=a.find("(1)");
}
std::stack <int> c;
int d=-1;
for(int j=0;j<a.length();j++)
{
if(a[j]=='(')
c.push(j);
if(a[j]==')')
{
d=c.top();
c.pop();
}
if(c.size()==0 && d!=-1)
{
if(a[d+1]=='(' && a[j-1]==')')
{
a.erase(j,1);
a.erase(d,1);
j--;
}
}
}
printf("%s",a.c_str());
}
printf("\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 | #include <cstdio> #include <vector> #include <string> #include <stack> int main() { int t; scanf("%d",&t); for(int i=0;i<t;i++) { int k; scanf("%d",&k); if(k) { std::string a=""; std::vector <int> dane; while(k>0) { dane.push_back(k%3); k/=3; } for(int j=0;true;j++) { if(dane.at(j)) { a+="1"; if(dane.at(j)==2) a+="+1"; if(j==dane.size()-1) break; else a+="+"; } else if(j==dane.size()-1) break; a+="(1+1+1)*("; } for(int j=0;j<dane.size()-1;j++) a+=")"; int b=a.find("(1)"); while(b!=-1) { b=a.find("(1)"); if(a[b-1]=='*' || a[b-1]=='+') a.erase(b-1,4); else a.erase(b,3); b=a.find("(1)"); } std::stack <int> c; int d=-1; for(int j=0;j<a.length();j++) { if(a[j]=='(') c.push(j); if(a[j]==')') { d=c.top(); c.pop(); } if(c.size()==0 && d!=-1) { if(a[d+1]=='(' && a[j-1]==')') { a.erase(j,1); a.erase(d,1); j--; } } } printf("%s",a.c_str()); } printf("\n"); } return 0; } |
English