http://acm.pku.edu.cn/JudgeOnline/problem?id=1131

Код:
#include "stdio.h"
#include "string.h"
#define N 24000
 
int answer[N]={0};
int ba[9][4]={{0,0,0,0}, 
           {0,1,2,5},
           {0,2,5,0},
           {0,3,7,5},
           {0,5,0,0},
           {0,6,2,5},
           {0,7,5,0},
           {0,8,7,5},
           {1,0,0,0}};
 
void di(int n,int a,int site) 
{
       int i,j;
    a--;
    if(n)
    {
              if (a==0)
              {
                     for (i=0;i<=3;i++)
                     {
                            j=site+i;
                            answer[j]+=ba[n][i];
                            answer[j-1]+=answer[j]/10;
                            answer[j]%=10;
                            while (answer[j-1]>=10)
                            {
                                   answer[j-2]+=answer[j-1]/10;
                                   answer[j-1]%=10;
                                   j--;
                            }
                     }
              }
              else
              {
                     di(ba[n][0],a,site);
                     di(ba[n][1],a,site+1);
                     di(ba[n][2],a,site+2);
                     di(ba[n][3],a,site+3);
              }
       }
}
 
int main()
{
       char shu[8000];
       int i,n,len;
       while (scanf("%s",shu)!=EOF)
       {
              len=strlen(shu);
              if (len==1)   
              {
                     if (shu[0]=='0')
                            printf("%s [8] = 0 [10]\n",shu);
                     else
                            printf("%s [8] = 1 [10]\n",shu);
              }
              else
              {
                     for(i=0;i<N;i++)
                            answer[i]=0;
                     for(i=2;i<len;i++)
                     {
                            n=shu[i]-'0';
                            di(n,i-1,1);
                     }
                     len=N-1;
                     while (answer[len]==0)
                            len--;
                     printf("%s [8] = 0.",shu);
                     for(i=2;i<=len;i++)
                            printf("%d",answer[i]);
                     printf(" [10]\n");
       }
       }
       return 0;
}