#include int FIB[40]; int intx, inty, intz; char vstx[43], vsty[43], vystup[43]; int FIB2INT(const char *vstup) { int suma = 0; int i, f = 0; //printf ("FIB2INT - vstup: %s, delka vstupu: %i\n", vstup, strlen (vstup)); for (i = strlen(vstup) - 1; i >= 0; i--, f++) if ( vstup [i] == '1') suma += FIB[f]; //printf ("suma: %i\n", suma); return suma; } int MAXFIB(int cislo) { int i = 0; while (FIB[i] <= cislo) i++; i--; return i; } char * INT2FIB (int cislo) { char *pomstr = new char[43]; for (int i = 0 ; i < 43 ; i ++) pomstr [i]= ' '; int pomfib, a = MAXFIB (cislo); while (cislo > 0) { pomfib = MAXFIB (cislo); //printf("MAXFIB=%d\n", pomfib); pomstr [42 - pomfib] = '1'; cislo -= FIB[pomfib]; //printf ("%d\n", cislo); } for (int i = (42 - a); i < 43 ; i ++) if (pomstr[i] != '1') pomstr [i] = '0'; return pomstr; } int FIBLEN (const char *f) { int i = 0; while ( f[i]==' ') i++; return strlen(f) - i; } int main (void) { FIB[0] = 1; FIB[1] = 2; for (int i = 2; i < 40; i ++) { FIB [i] = FIB[ i -1] + FIB [i -2]; //printf ("%i\n", FIB[i]); } char *a, *b, *c, *radek; a = new char[43]; b = new char[43]; radek = new char [1024]; while (gets (radek) ) { sscanf (radek, "%s %s\n", a, b); const int vysledek = FIB2INT(a) + FIB2INT(b); const int delka = FIBLEN(INT2FIB(vysledek)); char *tisk1 = a + (43-delka); char *tisk2 = b + (43-(delka+2)); printf ("%s\n+ %s\n",a, b); for (int x = 0; x < delka; x++) { if (x <2) { printf (" "); }else { printf ("-"); } } printf("\n"); //tisk3 = //intf ("%s\n+%s\n--------------\n", INT2FIB(FIB2INT(a)),INT2FIB(FIB2INT(b))); printf ("%s\n\n", INT2FIB(vysledek)); } return 0; }