Q - 小数化分数2

Description

Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢? 
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。

Input

第一行是一个整数N,表示有多少组数据。 
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。

Output

对每一个对应的小数化成最简分数后输出,占一行。

Sample Input

 

3

0.(4)

0.5

0.32(692307)

Sample Output

 

4/9

1/2

17/52

解题思路:

根据题目可知,一共有三种形式的小数需要我们去转换成分数,分别为:
  • 有限小数:形如 0.2,0.33
  • 纯循环小数:形如 0.333333333…
  • 非纯循环小数:形如 0.32477777… ,0.24367676767…

    显然,无限不循环小数不可能转换为分数(中学知识),而对于上面两种循环小数,我们不妨分情况来讨论。

    1、纯循环小数 
    0.33333… * 10 = 3.33333… 
    (10 - 1) * 0.33333… = 3 
    即 9 * 0.33333… = 3 
    所以 0.33333… = 3/9 = 1/3 
    再举一个例子 
    0.474747… * 100 = 47.474747… 
    (100 - 1) * 0.474747… = 47 
    即 99 * 0.474747… = 47 
    所以 0.474747… = 47/99

    由上述两个例子我们可以发现,纯循环小数化成分数过后其分子就为所循环单元化成的数,分母则全由9组成,位数和循环数的位数相同。

    2、非纯循环小数 
    0.4777777… * 10 = 4.7777… 
    0.477777… * 100 = 47.77777… 
    (100 - 10) * 0.4777777… = 43 
    所以 0.4777777… = 43/90 
    再举一个例子 
    0.323565656… * 1000 = 323.56565656… 
    0.323565656… * 100000= 32356.565656… 
    (10000 - 1000) * 0.32356565656… = 32033 
    所以 0.32356565656… = 32033/99000

    由上述两个例子我们可以发现,非纯循环小数化成分数过后其分子为 非循环部分与第一个循环部分 组成的数减去非循环部分的数,分母则为9与0组成的数,9的位数和循环部分数的位数相同,0的位数则和非循环部分数的位数相同

    PS:对于有限小数,不妨看作是非纯循环小数的一种特例子,即0.3 = 0.30000000

Code:

#include <cstdio>
#include <math.h>
int gcd(int a,int b){int c;c = a % b;while (c) {a = b;b = c;c = a % b;}return b;
}int main(){int N;scanf("%d",&N);while (N--) {char a[15];scanf("%s",a);int flag1 = 0;              //用来判断是否检查到过 '(' 符号int p = 0,q = 0;            //p代表非循环的位数,q代表循环的位数int x = 0,y = 0,z = 0;      //x代表分子,y代表分母,z代表括号中的数for (int i = 2;a[i];i++){if (a[i] != '(' && flag1 == 0){x *= 10;x += a[i] - '0';p++;}if (a[i] == '(' && flag1 == 0){flag1 = 1;i++;}if (a[i] != ')' && flag1 == 1){z *= 10;z += a[i] - '0';q++;}}if (flag1 && p){int n = q;int m = p;int temp = x;while(n--){y *= 10;y += 9;x *= 10;}while(m--){y *= 10;}x = x + z - temp;}if (flag1 && !p ){int n = q - 1;y = 9;x = z;while (n--) {y *= 10;y += 9;}}if (!flag1){int n = p;y = 1;while(n--)y *= 10;}int c = gcd(x, y);x /= c;y /= c;printf("%d/%d\n",x,y);}return 0;
}

小数化分数 (思维)相关推荐

  1. 紫书 习题8-14 UVa 1616(二分+小数化分数+精度)

    参考了https://www.cnblogs.com/dwtfukgv/p/5645446.html (1)直接二分答案.说实话我没有想到, 一开始以为是贪心, 以某种策略能得到最优解. 但是想了很久 ...

  2. 分数化成有限小数的方法_分数化小数的方法|小数化分数题目

    [www.520z-2.com - 话题作文] 小数由整数部分.小数部分和小数点组成.当测量物体时往往会得到的不是整数的数,古人就发明了小数来补充整数 小数是十进制分数的一种特殊表现形式.下面是小学生 ...

  3. 小数化分数 思路及代码模板 c++实现

    小数化分数 将一个小数化成一个最简分数的模板,小数包含简单小数和循环小数. 对于循环小数的输入我们将循环体用括号括起来表示. 思路 首先我们将小数部分的数化为分数:对于整数部分我们只需要将化好的分子加 ...

  4. 小数化分数c++(附做法数学证明)

    小数化分数 时间限制(普通/Java):1000MS/10000MS 内存限制:65536KByte 描述 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想 ...

  5. HNU程序设计-小数化分数

    一.问题描述 二.问题分析及思路 小数化分数: 1.对于不循环小数,小数点后有i位,则分子为这i位数,分母为10的i次方,约分得到最简分数(除最大公约数) 2.对于只有循环的小数,分子为循环的部分(i ...

  6. 小数点化分数的过程_小数化分数

    分数和小数的互化 _五__年级__数学____备课组教案 教师 课题 备课时间 分数和小数的互化 课时 课型 新授 课前准备:教材剖析(考点.易错点.关联考点) . 1. 理解并掌握分数和小数互化方法 ...

  7. 小数化分数的口诀表_五年级数学下册分数与小数的互化,常用的小数化成分数表,要熟记...

    分数与小数是两类不同的数字,它们之间可以互相转化.分数与小数,这两类数字又有各自不同的特点,在具体的使用环境中,虽然说这两个数字可以互相通用,但是它们的特性不同,所使用的范围是不一样的,有些情况下使用 ...

  8. c语言小数化分数,小数化分数

    小数化分数 /*小数化分数,非循环*/ #include #include #include double zdgys(double c,double d) {double o,p; o=1;p=1; ...

  9. poj 1930 无限小数化分数

    题意: 无限小数化分数. 转自: http://blog.csdn.net/xinghongduo/article/details/6231107 代码: #include <iostream& ...

最新文章

  1. python接口测试-认识GET请求
  2. thinkphp 5.0.3 rce getshell_关于ThinkPHP的一些渗透方式
  3. 图神经网络世界冠军团队手把手授课,7天搞定图神经网络!
  4. mysql错误代码 集合
  5. 3d vision可以卸载吗_金属粉末可以用于3D打印,但这些知识你了解吗?
  6. php selected,php-多个选择字段-多次使用selected =“ selected”
  7. qt 快速按行读取文件_这是知识点之Linux下分割文件并保留文件头
  8. windbg命令集合
  9. DotNetNuke 4/5 安装提示 msajax错误,下载AJAX 1.0即可解决
  10. 触摸传感器的电路图符号_如何看懂汽车电路常用图形符号,看完这篇文章就懂了...
  11. mysql读写分离错_MySQL主从同步、读写分离配置步骤、问题解决
  12. 巴斯勒相机外部触发接线_PLC控制柜的设计原理,电装布局、接线图和原理图
  13. hb100 微波雷达arduino_HB100微波雷达模块无线X波段雷达探测器探头传感器模块10.525GHz...
  14. CSS内联样式表、内部样式表、外部样式表
  15. 零基础SSM入门教程(50)–Spring总结与展望SpringBoot、SpringCloud
  16. 从苹果封杀Epic与特斯拉硬刚拼多多看新时代的渠道产品战
  17. 新款「超大杯」iPhone遭爆料!不止大镜头,还有1TB储存,但却不能叫iPhone13
  18. 彻底搞懂内存屏障(上)
  19. 一个对中国房地产业忧心忡忡的金融博士生
  20. 【互动多媒体】应用形式(二)体感换装/虚拟试衣

热门文章

  1. 使用canvas绘制太极
  2. java graphics画圆_在Java中绘制一个漂亮的圆圈
  3. java joda 获取utc时间_Java获取时间与系统时间相差8小时终极解决方案
  4. Android 模仿淘宝历史记录,记录存在手机内
  5. 解决http请求下无法开启麦克风问题
  6. 关于1NF、2NF、3NF、BCNF的常考判定
  7. 心理学 | (1)焦虑症和恐惧症--一种认知的观点
  8. win远程桌面连接无显示器Ubuntu(22.04.1 LTS)
  9. vue和php前后端分离
  10. 自封装验证手机号码、邮箱格式、身份证号的工具