#include #define MAX_LEN 511 unsigned fn[]={ 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, 433494437}; char str[MAX_LEN]; char a[MAX_LEN]; char b[MAX_LEN]; char c[MAX_LEN]; unsigned str2int(char *s) { int l=strlen(s); int i; unsigned ret=0; for (i=1;i<=l;i++) ret+=(s[l-i]=='1')*fn[i-1]; return ret; } void int2str(unsigned num,char *s) { int t=sizeof(fn)/sizeof(unsigned)-1; int i=0; while (t>0 && fn[t]>num) t--; while (t>=0) { if (fn[t]<=num) { s[i++]='1'; num-=fn[t]; } else s[i++]='0'; t--; } s[i++]=0; } int main(void) { unsigned na,nb,nc; int max,tmp; while (a[0]=0,scanf("%s %s",a,b),*a) { na=str2int(a); nb=str2int(b); nc=na+nb; int2str(na,a); int2str(nb,b); int2str(nc,c); max=strlen(a); tmp=strlen(b);if (tmp>max) max=tmp; tmp=strlen(c);if (tmp>max) max=tmp; sprintf(str," %%%ds\n",max);printf(str,a); sprintf(str,"+ %%%ds\n ",max);printf(str,b); for (na=0;na