小数化分数

时间限制(普通/Java):1000MS/10000MS 内存限制:65536KByte

描述

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

输入

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

输出

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

样例输入

3
0.(4)
0.5
0.32(692307)

样例输出

4/9
1/2
17/52

思路:1.对于普通不包含循环体的小数(其中有无限不循环小数), 其化为分数都是让小数点后组成的数除以10的此数的位数次方,比如0.1234=1234/10000。

2.对于含有循环体的小数,将循环体单独取出,计算出位数,有几位,则分母中就包含几个9,如果小数部分非循环体部分还有数,有几个数就在分母后面加几个零。例如例子中的 0.32(692307),分母就为99999900,循环体有6位所以分母有6个9,小数部分非循环体有两位数,则分母再加两个零。分子则是由循环体减去非循环体,例如:0.32(692307),分子为32692307-32

证明:对于一个数0.32(692307)

注意不要用pow有精度问题答案可能被卡掉,最后附上代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 60;
ll gcd(ll a, ll b)
{if (b == 0)return a;return gcd(b, a % b);
}
ll poww(ll x,ll y)
{ll s = 1;for (int i = 0; i < y; i++)s *= x;return s;
}
int main()
{int t;cin >> t;while (t--){string x;cin >> x;int n = x.size();int flag = 0;ll t1, t2, t3, t4, t5,s1,s2,s3,s4,s5;t1 = t2 = t3 = t4 = t5 = 0;s1 = s2 = s3 = s4 = s5 = 0;for (int i = 2; i < n; i++){if (x[i] == '(' || x[i] == ')')flag = 1;if (flag == 0){t4 = t4 * 10 + x[i] - 48;s1++;}if (flag == 1 &&x[i] >= '0' &&x[i] <= '9') s2++;if (x[i] >= '0' && x[i] <= '9')t3 = t3 * 10 + x[i] - 48;}if (flag == 0){for (int i = 2; i < n; i++)t1 = t1 * 10 + x[i] - 48;t2 = poww(10, n - 2);if (t1 > t2)t5 = gcd(t1, t2);else t5= gcd(t2, t1);cout << t1 / t5 << "/" << t2 / t5 << endl;}else{t1 = t3- t4;for (int i = 0; i < s2; i++)t2 = t2 * 10 + 9;t2 = t2 * poww(10, s1);if (t1 > t2)t5 = gcd(t1, t2);else t5 = gcd(t2, t1);cout << t1 / t5 << "/" << t2 / t5 << endl;}}return 0;
}

小数化分数c++(附做法数学证明)相关推荐

  1. HDOJ 1717 小数化分数2 (数学,循环小数化分数详细讲解)

     小数化分数2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

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

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

  3. hdu 1717 小数化分数2(数学)

    小数化分数2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

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

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

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

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

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

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

  7. 小数化分数 (思维)

    Q - 小数化分数2 Description Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?  请你写一 ...

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

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

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

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

最新文章

  1. 【20090319-02】asp.net 操作 word(转)
  2. python编程单词排序_Python读取英文文件并记录每个单词出现次数后降序输出示例...
  3. 怎么把丢失的计算机放回桌面,不小心把电脑桌面开始哪里放在右边了,怎么把它放回原处啊...
  4. greta一些简单实用的字符串匹配
  5. 公安计算机技能测试题库,2018公安文职考试题库:行政职业能力测验
  6. 全国信息联赛c语言,信息学竞赛之编程规则
  7. matlab设置工作路径
  8. matlab jar包,Matlab 將m文件打包成jar包 (二)使用jar包
  9. 服务器虚拟机系统镜像安装win7系统,在虚拟机中怎么安装Win7旗舰版系统
  10. TC与CATIA集成使用说明
  11. 实用的网页模板(一)
  12. MAC OS 下QQ音乐下载存放的位置
  13. SSD固态硬盘坏了,还能修好吗?
  14. c语言输出十六进制数乱码,输出乱码
  15. 模型中AIC和BIC以及loglikelihood的关系
  16. 如何提高强化学习算法模型的泛化能力?
  17. cad解除块的快捷命令_CAD怎么使用快捷命令快速创建永久块?
  18. html整体垂直居中,让html img图片垂直居中的三种方法
  19. 关于信息论中熵、相对熵、条件熵、互信息、典型集的一些思考
  20. 【PPPYTHON】太阳花代码

热门文章

  1. delphi透明panel组件或者制作方法
  2. react之router
  3. 数据结构导论c语言实现——顺序表
  4. facsum (线性筛 积性函数)
  5. python代码手机壁纸_70行python代码实现壁纸批量下载
  6. 比较 KAZE 与 SIFT 的算法
  7. cgal配置以及一些资料
  8. 分享 Python 教学视频,从基础到爬虫、网页、数据分析、机器学习.....
  9. 怎么在Mysql中添加列_mysql如何给表中添加列(字段)?
  10. Generic receive offload