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 }
不要让今天成为明天的遗憾!