Section 2.4 - Fractions to Decimals

 1  #include  < map >
 2  #include  < iostream >
 3 
 4  using   namespace  std;
 5 
 6  string  int2str( int  n)
 7  {
 8       if  (n  ==   0 )
 9           return   string ( " 0 " );
10       string  s;
11       while  (n)
12      {
13          s  +=  (n  %   10   +   ' 0 ' );
14          n  /=   10 ;
15      }
16       for  (unsigned i  =   0 ; i  <  s.size()  /   2 ; i ++ )
17          swap(s[i], s[s.size()  -  i  -   1 ]);
18       return  s;
19  }
20 
21  int  main()
22  {
23      freopen( " fracdec.in " " r " , stdin);
24      freopen( " fracdec.out " " w " , stdout);
25 
26       int  a, b, q, r;
27      map  < int int >  rRec;
28 
29       while  (cin  >>  a  >>  b)
30      {
31           string  ans  =  int2str(a  /  b)  +   ' . ' ;
32 
33          a  =  a  %  b;
34          rRec[a  %  b]  =  ans.size();
35 
36           int  cnt  =  ans.size()  +   1 ;
37           while  ( true )
38          {
39              a  =  a  *   10 ;
40              q  =  a  /  b;
41              r  =  a  %  b;
42 
43              ans  +=  (q  +   ' 0 ' );
44 
45               if  (r  ==   0   ||  rRec[r])
46                   break ;
47 
48              rRec[r]  =  cnt ++  ;
49 
50              a  =  r;
51          }
52 
53           if  (r)
54          {
55              ans  +=   ' ) ' ;
56              ans.insert(rRec[r],  " ( " );
57          }
58 
59           for  ( int  i  =   0 ; i  <  ans.size(); i ++ )
60          {
61              cout  <<  ans[i];
62               if  ((i  +   1 %   76   ==   0 )
63                  cout  <<  endl;
64          }
65 
66          cout  <<  endl;
67 
68          rRec.clear();
69      }
70 
71       return   0 ;
72  }
73 

你可能感兴趣的:(Section 2.4 - Fractions to Decimals)