#include <stdio.h> #include <string.h> char result[10000]; char *pr; const char* a[] = { "0" , "1", "1+1", "1+1+1", "1+1+1+1", "1+1+1+1+1" , "(1+1)*(1+1+1)", "(1+1)*(1+1+1)+1", "(1+1)*(1+1)*(1+1)", "(1+1+1)*(1+1+1)", "(1+1+1)*(1+1+1)+1" , "(1+1+1)*(1+1+1)+1+1", "(1+1)*(1+1)*(1+1+1)", "(1+1)*(1+1)*(1+1+1)+1", "((1+1)*(1+1+1)+1)*(1+1)", "((1+1)*(1+1)+1)*(1+1+1)" , "(1+1)*(1+1)*(1+1)*(1+1)", "(1+1)*(1+1)*(1+1)*(1+1)+1", "(1+1)*(1+1+1)*(1+1+1)", "(1+1)*(1+1+1)*(1+1+1)+1", "((1+1+1)*(1+1+1)+1)*(1+1)" , "((1+1)*(1+1+1)+1)*(1+1+1)", "((1+1)*(1+1+1)+1)*(1+1+1)+1", "((1+1)*(1+1+1)+1)*(1+1+1)+1+1" , "(1+1)*(1+1)*(1+1)*(1+1+1)", "(1+1)*(1+1)*(1+1)*(1+1+1)+1", "((1+1)*(1+1)*(1+1+1)+1)*(1+1)" , "(1+1+1)*(1+1+1)*(1+1+1)", "(1+1+1)*(1+1+1)*(1+1+1)+1", "(1+1+1)*(1+1+1)*(1+1+1)+1+1" , "((1+1+1)*(1+1+1)+1)*(1+1+1)", "((1+1+1)*(1+1+1)+1)*(1+1+1)+1", "(1+1)*(1+1)*(1+1)*(1+1)*(1+1)" }; void calc(unsigned int n) { if (n == 1) { *pr++ = '1'; return; } if (n <= 32) { *pr++ = '('; pr = stpcpy( pr, a[n] ); *pr++ = ')'; return; } if (n % 2 == 0) { *pr++ = '('; pr = stpcpy( pr, a[2] ); *pr++ = ')'; *pr++ = '*'; calc(n/2); return; } if (n % 3 == 0) { *pr++ = '('; pr = stpcpy( pr, a[3] ); *pr++ = ')'; *pr++ = '*'; calc(n/3); return; } if (n % 5 == 0) { *pr++ = '('; pr = stpcpy( pr, a[5] ); *pr++ = ')'; *pr++ = '*'; calc(n/5); return; } *pr++ = '('; *pr++ = '1'; *pr++ = '+'; calc(n-1); *pr++ = ')'; } int main() { int t, i; unsigned int k; scanf("%d\n", &t); for(i = 0; i < t; ++i) { pr = result; scanf("%u\n", &k); calc(k); *pr = '\0'; printf("%s\n", result); } 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 | #include <stdio.h> #include <string.h> char result[10000]; char *pr; const char* a[] = { "0" , "1", "1+1", "1+1+1", "1+1+1+1", "1+1+1+1+1" , "(1+1)*(1+1+1)", "(1+1)*(1+1+1)+1", "(1+1)*(1+1)*(1+1)", "(1+1+1)*(1+1+1)", "(1+1+1)*(1+1+1)+1" , "(1+1+1)*(1+1+1)+1+1", "(1+1)*(1+1)*(1+1+1)", "(1+1)*(1+1)*(1+1+1)+1", "((1+1)*(1+1+1)+1)*(1+1)", "((1+1)*(1+1)+1)*(1+1+1)" , "(1+1)*(1+1)*(1+1)*(1+1)", "(1+1)*(1+1)*(1+1)*(1+1)+1", "(1+1)*(1+1+1)*(1+1+1)", "(1+1)*(1+1+1)*(1+1+1)+1", "((1+1+1)*(1+1+1)+1)*(1+1)" , "((1+1)*(1+1+1)+1)*(1+1+1)", "((1+1)*(1+1+1)+1)*(1+1+1)+1", "((1+1)*(1+1+1)+1)*(1+1+1)+1+1" , "(1+1)*(1+1)*(1+1)*(1+1+1)", "(1+1)*(1+1)*(1+1)*(1+1+1)+1", "((1+1)*(1+1)*(1+1+1)+1)*(1+1)" , "(1+1+1)*(1+1+1)*(1+1+1)", "(1+1+1)*(1+1+1)*(1+1+1)+1", "(1+1+1)*(1+1+1)*(1+1+1)+1+1" , "((1+1+1)*(1+1+1)+1)*(1+1+1)", "((1+1+1)*(1+1+1)+1)*(1+1+1)+1", "(1+1)*(1+1)*(1+1)*(1+1)*(1+1)" }; void calc(unsigned int n) { if (n == 1) { *pr++ = '1'; return; } if (n <= 32) { *pr++ = '('; pr = stpcpy( pr, a[n] ); *pr++ = ')'; return; } if (n % 2 == 0) { *pr++ = '('; pr = stpcpy( pr, a[2] ); *pr++ = ')'; *pr++ = '*'; calc(n/2); return; } if (n % 3 == 0) { *pr++ = '('; pr = stpcpy( pr, a[3] ); *pr++ = ')'; *pr++ = '*'; calc(n/3); return; } if (n % 5 == 0) { *pr++ = '('; pr = stpcpy( pr, a[5] ); *pr++ = ')'; *pr++ = '*'; calc(n/5); return; } *pr++ = '('; *pr++ = '1'; *pr++ = '+'; calc(n-1); *pr++ = ')'; } int main() { int t, i; unsigned int k; scanf("%d\n", &t); for(i = 0; i < t; ++i) { pr = result; scanf("%u\n", &k); calc(k); *pr = '\0'; printf("%s\n", result); } return 0; } |