ACM—循环小数转变成分数知识点_C++实现

 1 在小学的时候,我们的学生都能把“整数表示成分母是1的分数”,而且大多数学生也都能把有限小数和循环小数表示成分数的形式.这样,整数、分数、有限小数、循环小数都属于有理数.教科书中说“整数和分数统称有理数”,其中当然包括有限小数和无限循环小数.
 2 
 3 例 把3, 0.2, ,,,表示成分数.
 4 
 5 思路分析:3=, 0.2=,=, =,=,==.
 6 
 7 特别提醒:把循环小数化成分数是有规律可循的.下面我们用方程的思想,借助具体的例子来总结这个规律:
 8 
 9 设 =x……………①,现将左右两端同时乘以1000得
10 
11 231. =1000 x………②
12 
13 于是,由②-①,得
14 
15     231=1000 x- x
16 
17 即        999x=231
18 
19 故        x =,
20 
21 约分,得  x=.
22 
23 可见转化成分数是.于是在此基础上给出纯循环小数化为分数的一般方法就不困难了.请老师引导学生,尽量让学生自已从中归纳得出相应的一般方法来.
24 
25 设,则有
26 
27 10y=2.……………①
28 
29 1000y=231. ………②
30 
31 由②-①得
32 
33 1000y-10 y =231-2
34 
35 即       y=.
36 
37 可见转化成分数是,在此基础上给出混循环小数化为分数的一般方法是不困难的.请老师们引导学生自己去归纳.

 

 1 #include <iostream>
 2 #include <cctype>
 3 #include <cmath>
 4 using namespace std;
 5 int gcd(int a,int b)
 6 {
 7     int c;
 8     if(a<b)
 9     {
10         c=a;
11         a=b;
12         b=c;
13     }
14     while(b)
15     {
16         c=a%b;
17         a=b;
18         b=c;
19     }
20     return a;
21 }
22 int main()
23 {
24     int count_=0;
25     int i=0,first=0,end_=0;
26     string temp;
27     int a,b;
28     cin>>count_;
29     while(count_--)
30     {
31         a=0;b=0;i=0;
32         cin>>temp;
33         while(temp[i++]!='.');
34         while(isdigit(temp[i]))
35             a=a*10+temp[i++]-'0';
36         first=i-2;
37         if(temp[i]!='\0')
38         {
39             i++;
40             while(isdigit(temp[i]))
41             b=b*10+temp[i++]-'0';
42 
43             end_=i-first-3;
44 
45             a=b+a*pow(10,end_)-a;
46             b=pow(10,end_+first)-pow(10,first);
47 
48         }
49         else
50         {
51             b=pow(10,first);
52         }
53         i=gcd(b,a);
54         cout<<a/i<<"/"<<b/i<<endl;
55     }
56     return 0;
57 }

 

posted @ 2013-11-01 16:49  退之  阅读(1031)  评论(0编辑  收藏  举报