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 }

转载于:https://www.cnblogs.com/huanyan/archive/2011/05/08/USACO_Fractions_to_Decimals.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值