进制转换,模拟字符串除法
- 题意:
求一个八进制小数的十进制。 - 分析:
1.求0.756[8] -> ( (6/8 + 5)/8 + 7)/8 [10]- 除法过程:如 0.75
- 5/8的结果需要是整数,那么就5000/8=625 (5加几个0能被8整除就加几个0)
- 625不能直接加上7,应该加上7000,得到7625;
- 7625不能被8整除,那么就7625000/8;
- 输出即可。
- 除法过程:如 0.75
参考:https://blog.csdn.net/weixin_30732487/article/details/94839384
//进制转换,模拟
#include <iostream>
#include <cstring>
using namespace std;
const int N = 10010;
char d[N];
int ans[N];//用数组按位存储n位小数
int main() {
while (cin >> d) {
memset(ans, 0, sizeof(ans));//初始化ans[]
int d2,len=strlen(d),t=0;
for (int i = len - 1; i > 1; i--) {
d2 = d[i] - '0';//小数的每一位
int k = 0, j = 0;
while(j < t || d2) {//数组模拟除法计算
d2 = d2 * 10 + ans[j++];
ans[k++] = d2 / 8;//商
d2 %= 8;//余数
}
t = k;//结果位数
}
cout << d << " [8] = 0.";
for (int i = 0; i < t; i++)
cout << ans[i];
cout << " [10]" << endl;
}
return 0;
}