#include<stdio.h>
#include<string.h>
#define MAX_LENGTH 10000
int main() {
char arr[MAX_LENGTH];
char* current_arr;
int result, k, current;
int opened_counter;
const char three[] = "1+1+1";
const char two[] = "1+1";
const char three_mul[] = "(1+1+1)*(";
const char two_mul[] = "(1+1)*(";
const char one_plus[] = "1+";
const char* arr_to_add = NULL;
int val_to_add = 0;
int t,i;
scanf("%d\n", &t);
for (i=0; i<t; ++i) {
scanf("%d\n", &k);
arr[0] = '\0';
current_arr = arr;
result = 0;
opened_counter = 0;
current = k;
while ( current > 1 ) {
switch (current) {
case 3:
arr_to_add = three;
val_to_add = 5;
current = 1;
result += 3;
break;
case 2:
arr_to_add = two;
val_to_add = 3;
current = 1;
result += 2;
break;
default:
if ( (current%3) == 0 ) {
arr_to_add = three_mul;
val_to_add = 9;
result += 3;
++opened_counter;
current /= 3;
} else if ( (current%2) == 0 ) {
arr_to_add = two_mul;
val_to_add = 7;
result += 2;
++opened_counter;
current /= 2;
} else {
arr_to_add = one_plus;
val_to_add = 2;
++result;
--current;
}
break;
}
memcpy(current_arr, arr_to_add, val_to_add);
current_arr += val_to_add;
}
if (opened_counter>0) {
memset(current_arr, ')', opened_counter);
current_arr += opened_counter;
}
(*current_arr) = '\0';
if ( k == 1 ) { //special case
arr[0] = '1';
arr[1] = '\0';
}
if (result<=100) {
printf("%s\n",arr);
} else {
printf("NIE\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 78 79 80 81 82 83 84 85 86 87 88 89 | #include<stdio.h> #include<string.h> #define MAX_LENGTH 10000 int main() { char arr[MAX_LENGTH]; char* current_arr; int result, k, current; int opened_counter; const char three[] = "1+1+1"; const char two[] = "1+1"; const char three_mul[] = "(1+1+1)*("; const char two_mul[] = "(1+1)*("; const char one_plus[] = "1+"; const char* arr_to_add = NULL; int val_to_add = 0; int t,i; scanf("%d\n", &t); for (i=0; i<t; ++i) { scanf("%d\n", &k); arr[0] = '\0'; current_arr = arr; result = 0; opened_counter = 0; current = k; while ( current > 1 ) { switch (current) { case 3: arr_to_add = three; val_to_add = 5; current = 1; result += 3; break; case 2: arr_to_add = two; val_to_add = 3; current = 1; result += 2; break; default: if ( (current%3) == 0 ) { arr_to_add = three_mul; val_to_add = 9; result += 3; ++opened_counter; current /= 3; } else if ( (current%2) == 0 ) { arr_to_add = two_mul; val_to_add = 7; result += 2; ++opened_counter; current /= 2; } else { arr_to_add = one_plus; val_to_add = 2; ++result; --current; } break; } memcpy(current_arr, arr_to_add, val_to_add); current_arr += val_to_add; } if (opened_counter>0) { memset(current_arr, ')', opened_counter); current_arr += opened_counter; } (*current_arr) = '\0'; if ( k == 1 ) { //special case arr[0] = '1'; arr[1] = '\0'; } if (result<=100) { printf("%s\n",arr); } else { printf("NIE\n"); } } return 0; } |
English