#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string x,string y)
{
string c;
c.reserve(100);
string a;
a.reserve(100);
string b;
b.reserve(100);
a=a+x;
b=b+y;
if(x.size()>y.size())
{
for(int i=y.size();i<x.size();i++)
{
b=b+'0';
}
}else if(x.size()<y.size())
{
for(int i=x.size();i<y.size();i++)
{
a=a+'0';
}
}
//cout<<"a "<<a<<" b "<<b<<endl;
int jw=0;
for(int i=a.size()-1;i>=0;i--)
{
if(a[i]!='.')
{
if(i>=0)
{
c=c+(char)((a[i]-'0'+b[i]-'0'+jw)%10+'0');
jw=(a[i]-'0'+b[i]-'0'+jw)/10;
}
}else
{
c=c+'.';
}
}
reverse(c.begin(),c.end());
return c;
}
string mul(string a,int b)//a小數 b個位數
{
string t;
t.reserve(100);
int jw=0;
for(int i=a.size()-1;i>=0;i--)
{
if(a[i]!='.')
{
t=t+(char)(((a[i]-'0')*b+jw)%10+'0');
jw=((a[i]-'0')*b+jw)/10;
}else
{
t=t+'.';
}
}
reverse(t.begin(),t.end());
return t;
}
string dev(string a)//除8
{
string t;
t.reserve(100);
int ys=0;
for(int i=0;(i<a.size())||(ys!=0);i++)
{
if(i>=a.size())
{
t=t+(char)((ys*10)/8+'0');
ys=(ys*10)%8;
}else if(a[i]!='.')
{
t=t+(char)((a[i]-'0'+ys*10)/8+'0');
ys=(a[i]-'0'+ys*10)%8;
}else if(a[i]=='.')
{
t=t+'.';
}
if((ys==0)&&(i>=a.size()))
{
return t;
}
}
}
int main()
{
//cout<<add("0.0","0.875")<<endl;
while(1)
{
string a;
cin>>a;
if(cin.eof()==1)
{
break;
}
string ba="1.0";
string sum;
sum.reserve(100);
sum="0.0";
for(int i=2;i<a.size();i++)
{
ba=dev(ba);
//cout<<"ba "<<ba<<endl;
string t;
t=mul(ba,a[i]-'0');
//cout<<"mul "<<t<<endl;
string jg;
jg=add(sum,t);
sum.reserve(100);
sum=jg;
//cout<<"sum "<<sum<<endl;
}
cout<<a<<" [8] = "<<sum<<" [10]"<<endl;
}
return 0;
}

給出n位8進制小數,求對應10進制小數不超過3n位。 謝謝博友文章。
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
//抄博友好程式
int ans[1000008];
int main()
{
while(1)
{
string s;
cin>>s;
if(cin.eof()==1)
{
break;
}
memset(ans,0,sizeof(ans));
int t=0;
for(int i=s.size()-1;i>1;i--)
{
int j=0;
int d2=s[i]-'0';
while(j<t||d2!=0)//抄博友 沒掌握
{
d2=d2*10+ans[j];
ans[j]=d2/8;
d2=d2%8;
j++;
}
t=j;
/*
for(int i=0;i<t;i++)
{
cout<<ans[i];
}
cout<<endl; */
}
cout<<s<<" [8] = 0.";
for(int i=0;i<t;i++)
{
cout<<ans[i];
}
cout<<" [10]"<<endl;
}
return 0;
}