poj1131-Octal Fractions(进制转换)

一,题意:
  求一个八进制小数的十进制。
二,思路:
  暴力数组模拟计算,注意千万不带小数做除法运算
  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 }
View Code

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-10-03 14:18  My_Sunshine  阅读(677)  评论(0编辑  收藏  举报