一,题意:
求一个八进制小数的十进制。
二,思路:
暴力数组模拟计算,注意千万不带小数做除法运算
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,输出即可。
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 const int N = 10010; 5 char d[N] ; 6 int ans[N] ; 7 int main(){ 8 while(cin>>d){ 9 memset(ans,0,sizeof(ans)); //每组数据都必须先初始化ans[] 10 int d2; 11 int len = strlen(d); //记录小数的位数 12 int t = 0 ; 13 for(int i = len - 1 ; i > 1 ; i--){ 14 d2 = d[i] - ‘0‘ ; //d2来接收小数的每一位的数 15 int k = 0 , j = 0 ; 16 while(j<t || d2){ //此循环内语句为数组模拟除法计算 17 d2 = d2*10 + ans[j++]; 18 ans[k++] = d2/8 ; 19 d2 %= 8 ; 20 } 21 t = k; //记录最后的得到的位数 22 } 23 cout<<d<<" [8] = 0." ; 24 for(int i = 0 ; i < t ; i++) 25 cout<<ans[i]; 26 cout<<" [10]"<<endl; 27 } 28 return 0; 29 }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-12-12 00:16:59