一,题意:
求一个八进制小数的十进制。
二,思路:
暴力数组模拟计算,注意千万不带小数做除法运算
1,对于八进制小数,转换成十进制,书写形式分析:
2,对其除法过程进行模拟:
3,输出。
三,步骤:
1,0.756[8] -> ( (6/8 + 5)/8 + 7)/8 [10]
2, 除法过程:如 0.75
i,5/8的结果要是整数,那么就5000/8=625 (5加几个0能被8整除就加几个0)
ii,625不能直接加上7,应该加上7000,得到7625;
iii,7625不能被8整除,那么就7625000/8;
3,输出即可。
#include<iostream>
#include<cstring>
using namespace std;
const int N = ;
char d[N] ;
int ans[N] ;
int main(){
while(cin>>d){
memset(ans,,sizeof(ans)); //每组数据都必须先初始化ans[]
int d2;
int len = strlen(d); //记录小数的位数
int t = ;
for(int i = len - ; i > ; i--){
d2 = d[i] - '' ; //d2来接收小数的每一位的数
int k = , j = ;
while(j<t || d2){ //此循环内语句为数组模拟除法计算
d2 = d2* + ans[j++];
ans[k++] = d2/ ;
d2 %= ;
}
t = k; //记录最后的得到的位数
}
cout<<d<<" [8] = 0." ;
for(int i = ; i < t ; i++)
cout<<ans[i];
cout<<" [10]"<<endl;
}
return ;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。