#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; } |