#define START_MASK (1 << 30) #include <string> #include <cstdio> using namespace std; string leftSide; string rightSide; bool last2p1 = false; int ones = 0; void appendTwo() { if (last2p1) { leftSide += "("; rightSide += ")*(1+1)"; } else { rightSide += "*(1+1)"; } last2p1 = false; ones += 2; } void appendTwoPlusOne() { appendTwo(); rightSide += "+1"; last2p1 = true; ones++; } void Solve(int n) { int mask = START_MASK; bool first = false; bool bit; while (mask > 0) { bit = n & mask; if (!first) { if (bit) { first = true; rightSide = "1"; } } else { if (bit) { appendTwoPlusOne(); } else { appendTwo(); } } mask >>= 1; } } int main() { int queries, n; scanf("%d", &queries); for (int q = 0; q < queries; q++) { scanf("%d", &n); Solve(n); if ((leftSide.length() == 0 && rightSide.length() == 0) || ones > 100) { printf("NIE\n"); } else { printf("%s%s\n", leftSide.c_str(), rightSide.c_str()); } leftSide = rightSide = ""; last2p1 = false; ones = 0; } 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 78 79 80 81 82 83 84 85 86 87 88 89 | #define START_MASK (1 << 30) #include <string> #include <cstdio> using namespace std; string leftSide; string rightSide; bool last2p1 = false; int ones = 0; void appendTwo() { if (last2p1) { leftSide += "("; rightSide += ")*(1+1)"; } else { rightSide += "*(1+1)"; } last2p1 = false; ones += 2; } void appendTwoPlusOne() { appendTwo(); rightSide += "+1"; last2p1 = true; ones++; } void Solve(int n) { int mask = START_MASK; bool first = false; bool bit; while (mask > 0) { bit = n & mask; if (!first) { if (bit) { first = true; rightSide = "1"; } } else { if (bit) { appendTwoPlusOne(); } else { appendTwo(); } } mask >>= 1; } } int main() { int queries, n; scanf("%d", &queries); for (int q = 0; q < queries; q++) { scanf("%d", &n); Solve(n); if ((leftSide.length() == 0 && rightSide.length() == 0) || ones > 100) { printf("NIE\n"); } else { printf("%s%s\n", leftSide.c_str(), rightSide.c_str()); } leftSide = rightSide = ""; last2p1 = false; ones = 0; } return 0; } |