标签:
一,题意:
求一个八进制小数的十进制。
二,思路:
暴力数组模拟计算,注意千万不带小数做除法运算
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 }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://www.cnblogs.com/My-Sunshine/p/4853359.html