USACO 2.4 Fractions to Decimals

此题水深。。。提交13次。。。

TASK: fracdec
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.000 secs, 3420 KB]
   Test 2: TEST OK [0.000 secs, 3420 KB]
   Test 3: TEST OK [0.000 secs, 3420 KB]
   Test 4: TEST OK [0.000 secs, 3420 KB]
   Test 5: TEST OK [0.000 secs, 3420 KB]
   Test 6: TEST OK [0.000 secs, 3420 KB]
   Test 7: TEST OK [0.000 secs, 3420 KB]
   Test 8: TEST OK [0.054 secs, 3436 KB]
   Test 9: TEST OK [0.000 secs, 3420 KB]

All tests OK.

Your program ('fracdec') produced all correct answers!  This is your
submission #13 for this problem.  Congratulations!

 

1 /*
2 PROG: fracdec
3 ID: jiafeim1
4 LANG: C++
5  */
6 #include <sstream>
7 #include <algorithm>
8 #include <iostream>
9 #include <fstream>
10 #include <string>
11 #include <stdlib.h>
12 #include <stdio.h>
13
14 using namespace std;
15
16 long gcd(long n1,long n2)
17 {
18 long temp;
19 if(n1<n2)
20 {
21 temp = n1;
22 n1 = n2;
23 n2 = temp;
24 }
25 while(n1!=n2)
26 {
27 n1 = n1 - n2;
28 if(n1<n2)
29 {
30 temp = n1;
31 n1 = n2;
32 n2 = temp;
33 }
34 }
35 return n1;
36 }
37
38 int yu[100100]={0};
39
40 int main()
41 {
42 std::ifstream fin("fracdec.in");
43 std::ofstream fout("fracdec.out");
44
45 long fenzi,fenmu;
46 fin>>fenzi>>fenmu;
47 long fz =fenzi,fm=fenmu;
48
49 if(fenzi % fenmu == 0)
50 {
51 fout<<fenzi/fenmu<<".";
52 fout<<"0"<<endl;
53 }
54 else
55 {
56 fenzi%=fenmu;
57 long gd = gcd(fenzi,fenmu);
58
59 fenmu/=gd;
60 fenzi/=gd;
61 long cur_yu=fenzi;
62 int count = 0;
63 char res[100100];
64 int top = 0;
65 bool isXun = false;
66 for(int i = 0;i<=100100;++i)
67 {
68 yu[i] = -1;
69
70 }
71 do
72 {
73 if(cur_yu % fenmu==0)
74 {
75 break;
76 }
77 if(yu[cur_yu % fenmu]>=0)
78 {
79 isXun = true;
80 break;
81
82 }
83 yu[cur_yu]=count++;
84 res[top++] = (cur_yu*10)/fenmu + '0';
85
86 cur_yu=(cur_yu*10) % fenmu;
87
88 }while(true);
89 res[top] = 0;
90 if(isXun)
91 {
92 std::stringstream osx;
93
94 osx<<fz/fm<<".";
95 string ttt;
96 osx>>ttt;
97 string toOut =ttt+ string(res,res+yu[cur_yu% fenmu]) + "("+string(res+yu[cur_yu% fenmu],count-yu[cur_yu% fenmu])+")";
98 string::size_type i;
99 for(i = 0;i<toOut.size();i+=76)
100 {
101 fout<<toOut.substr(i,76)<<endl;
102 }
103 }
104 else
105 {
106 fout<<fz/fm<<".";
107 fout<<res<<endl;
108
109 }
110 }
111 fin.close();
112 fout.close();
113 return 0;
114 }
posted @ 2011-05-08 22:41  幻魇  阅读(231)  评论(0编辑  收藏  举报