2009-03-17 19:03:36來源不明

2006 NPSC F. 費波那星

費波那進位法,通過原因不明

/************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
 char x[1001],y[1001];
 while(scanf("%s",x)==1)
   {
    if(x[0]==48&&strlen(x)==1) break;
    scanf("%s",y);
    int n=strlen(x),m=strlen(y),max=0,flag=0;
    int ans[1005]={0},a,b,c;
    for(a=0;a<n;a++)
     ans[a]=ans[a]+x[a]-48;
    for(a=0;a<m;a++)
     ans[a]=ans[a]+y[a]-48;
    for(a=0;a<=1004;a++)
     {
      if(ans[a]==1&&ans[a+1]==1)
       {
        ans[a]--;
        ans[a+1]--;
        ans[a+2]=ans[a+2]+1;
        flag=1;
       }
      if(ans[a]==2&&a>=2)
       {
        ans[a+1]=ans[a+1]+1;
        ans[a-2]=ans[a-2]+1;
        ans[a]=0;
        flag=1;
       }
      if(ans[a]==2&&a==0)
       {
        ans[a+1]=ans[a+1]+1;
        flag=1;
        ans[a]=0;
       }
      if(ans[a]==2&&a==1)
       {
        ans[a+1]=ans[a+1]+1;
        ans[a-1]=ans[a-1]+1;
        ans[a]=0;
        flag=1;
       }
      if(ans[a]==3)
       {
        ans[a+2]=ans[a+2]+1;
        ans[a-1]=ans[a-1]+1;
        ans[a]=0;
        flag=1;
       }
      if(ans[a]==1&&ans[a-1]==1)
       {
        ans[a]--;
        ans[a-1]--;
        ans[a+1]=ans[a+1]+1;
        flag=1;
       }
       if(flag==1&&a==1004) {a=-1;flag=0;}
     }
    for(a=1003;a>=0;a--)
     if(ans[a]!=0) {max=a+1;break;}
    for(a=0;a<max;a++)
     printf("%d",ans[a]);
    printf("\n"); 
   }
 return 0;
}