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;
}