一:任务描述
八进制(以 8 为基数)表示的小数可以用十进制精确地表示。例如,八进制的 0.75 表示为十进制的 0.953125(7/8+5/64)。所有在小数点右边的 n 位八进制数可以用不超过在小数点右边的 3n 位的十进制小数来表示。
编写一个程序,将 0~1 之间(包含 0 和 1)的八进制小数转换为等同的十进制小数。
二:输入
程序的输入将由若干八进制数组成,每行一个。每个输入八进制数的格式为 0.d1d2d3…dk,其中 di 是八进制数字(0…7),对 k 没有限制。
三:输出
输出由一系列行组成,格式为 0.d1d2d3…dk[8] = 0.D1D2D3…Dm[10],其中,左式是输入(八进制);右式是等同的十进制值,不能有 0 结尾,即 Dm 不等于 0
四:算法实现过程
五:代码实现
#include <iostream>
#include <cstring>
using namespace std;
/*begin*/
int main(){
string ch;
while(cin>>ch){//以字符的方式读入
int ans[100000];
int len=0,d=0,t=0;
for(int i = ch.size()-1;i > 1; i --){
d=ch[i]-'0';//将字符转换为数字
int k=0,j=0;
while(j<t||d){
d=d*10+ans[j++];
ans[k++]=d/8;
d=d%8;
}
t=k;
}
cout<<ch<<" "<<"[8]"<<" "<<"="<<" "<<"0.";
for(int i = 0; i < t;i ++){
cout<<ans[i];
}
cout<<" "<<"[10]"<<endl;
for(int i=0;i<t;i++){
ans[i]=0;
}
}
}
/*end*/