题意:八进制小数转化成十进制的小数。
0.d1d2d3 ... dk [8] = 0.D1D2D3 ... Dm [10]
例:
0.75 [8] = 7*8^-1+5*8^-2 = ( 5/8 + 7 ) / 8 = 0.953125 [10]
算法:主要就是实现上面的秦九韶算法。
实现:模拟手算除法:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=100000;
char num_2[N];
char num_10[N];
int main()
{
while(scanf("%s",num_2)!=EOF)
{
memset(num_10,0,sizeof num_10);
int index=0;
int len=strlen(num_2);
for(int i=len-1;i>=2;i--)
{
int j;
int digit=num_2[i]-'0';
for(j=0;j<index||digit;j++)
{
digit=digit*10+(j<index?num_10[j]-'0':0);
num_10[j]=digit/8+'0';
digit%=8;
}
index=j;
}
num_10[index]='\0';
printf("%s [8] = 0.%s [10]\n",num_2,num_10);
}
return 0;
}