• 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]!='')
    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 }
  • 相关阅读:
    leetcode-----118. 杨辉三角
    leetcode-----117. 填充每个节点的下一个右侧节点指针 II
    leetcode-----116. 填充每个节点的下一个右侧节点指针
    leetcode-----115. 不同的子序列
    leetcode-----114. 二叉树展开为链表
    leetcode-----113. 路径总和 II
    leetcode-----112. 路径总和
    leetcode-----111. 二叉树的最小深度
    windows同时安装jdk7和jdk8
    使用乌龟Git连接github
  • 原文地址:https://www.cnblogs.com/orangebook/p/3402087.html
Copyright © 2020-2023  润新知