/* 解题报告: (0.75)8 = (7*8-1 * 5*8-2) = (0.953125)10 其中负号代理多少次方 (0.75)8 = ((5/8 + 7)/8) */ #include <iostream> #include <cstring> using namespace std; const int MAX = 100; char szOctal[MAX]; char szDest[MAX]; int main() { int i, j; int nNum, nTemp; int nIndex; while(cin>>szOctal) { memset(szDest, 0, sizeof(szDest)); nIndex = 0; for(i=strlen(szOctal)-1; i>1; i--) { nNum = szOctal[i] - '0'; //实现小数的大数除(本题为除8的大数除法) for(j=0; j<nIndex || nNum; j++) { nTemp = nNum * 10 + (j<nIndex ? szDest[j] - '0' : 0); szDest[j] = nTemp/8 + '0'; nNum = nTemp%8; } nIndex = j; } szDest[j] = '/0'; cout<<szOctal<<" [8] = 0."<<szDest<<" [10]"<<endl; } return 0; }