#include #define SIZE 100 unsigned long Fib[SIZE]; long FibToDec(char * in) { long i, res = 0; int j = 0; for(i = strlen(in)-1; i >= 0; i--) { if(in[i] == '1') { res += Fib[j];;;;;;;; } j++; };;;;;;;;;;;; return res; } char* DecToFib(long dec, char* out) { long i; long j = 0; int was1 = 0; for(i = SIZE-1; i >= 0; i--) { if(dec >= Fib[i]) { /* printf("%ld %ld\n", dec, Fib[i]);*/ was1 = 1; out[j++] = '1'; dec -= Fib[i]; } else { if(was1) out[j++] = '0'; } } out[j] = 0; return out; } void PrintSpaces(int n) { while(n--) { printf(" "); } } int main() { int i; char a[SIZE], b[SIZE], r[SIZE]; long ia, ib, rlen, ir, alen, blen; Fib[0] = 1; Fib[1] = 2; for(i = 2; i < SIZE; i++) { Fib[i] = Fib[i-1]+Fib[i-2]; } /* printf("%s",DecToFib(17,r));*/ while(scanf("%s %s", a, b) > 0) { ia = FibToDec(a); ib = FibToDec(b); ir = ia + ib; DecToFib(ir, r); DecToFib(ia, a); DecToFib(ib, b); rlen = strlen(r); alen = strlen(a); blen = strlen(b); PrintSpaces(rlen - alen + 2); printf("%s (%ld)\n", a, ia); printf("+"); PrintSpaces(rlen - blen + 1); printf("%s (%ld)\n", b, ib); printf(" "); for(i = 0; i < rlen; i++) printf("-"); printf("\n"); printf(" %s (%ld)\n\n", r, ir); } return 0; }