#include int fibona[] = { 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296 }; int convert(char *str) { int j = 0, vys = 0; while (j < strlen(str)) { if (str[j] == '1') vys += fibona[strlen(str) - j -1]; j++; } return vys; } void back(int i, char *str) { int j = 40; while (fibona[j] > i) j--; *str = '1'; str++; i -= fibona[j]; j--; while (i > 0) { if (fibona[j] > i) *str = '0'; else { *str = '1'; i -= fibona[j]; } str++; j--; } while (j >= 0) { *str = '0'; str++; j--; } *str = 0; } int main() { char X[50], Y[50], vys_r[50]; int X_num, Y_num, vys, d; while (1) { scanf("%s%s", X, Y); X_num = convert(X); Y_num = convert(Y); back(X_num, X); back(Y_num, Y); vys = X_num + Y_num; back(vys, vys_r); d = strlen(vys_r); printf(" %*s\n+ %*s\n", d, X, d, Y); printf(" "); for (int i = 0; i < d; i++) printf("-"); printf("\n %*s\n\n", d, vys_r); } return 0; }