hdu 1717 小数化分数2
2015-07-21 19:34
357 查看
利用扩倍法
⑴ 把0.4747……和0.33……化成分数。
0.4747……×100=47.4747……
0.4747……×100-0.4747……=47.4747……-0.4747……
(100-1)×0.4747……=47
即99×0.4747…… =47
那么 0.4747……=47/99
0.33……×10=3.33……
0.33……×10-0.33……=3.33…-0.33……
(10-1) ×0.33……=3
即9×0.33……=3
那么0.33……=3/9=1/3
⑵把0.4777……和0.325656……化成分数。
0.4777……×10=4.777……①
0.4777……×100=47.77……②
用②-①即得:
0.4777……×90=47-4
所以, 0.4777……=43/90
0.325656……×100=32.5656……①
0.325656……×10000=3256.56……②
用②-①即得:
0.325656……×9900=3256.5656……-32.5656……
0.325656……×9900=3256-32
所以, 0.325656……=3224/9900=806/2475
根据以上便直接可一写出公式:
无循环时:直接将 小数部分*10^n / 10^n 约分即可
有循环时:(整个小数*10^a - 非循环部分*10^b)/(10^a-10^b) 约分即可
代码如下
⑴ 把0.4747……和0.33……化成分数。
0.4747……×100=47.4747……
0.4747……×100-0.4747……=47.4747……-0.4747……
(100-1)×0.4747……=47
即99×0.4747…… =47
那么 0.4747……=47/99
0.33……×10=3.33……
0.33……×10-0.33……=3.33…-0.33……
(10-1) ×0.33……=3
即9×0.33……=3
那么0.33……=3/9=1/3
⑵把0.4777……和0.325656……化成分数。
0.4777……×10=4.777……①
0.4777……×100=47.77……②
用②-①即得:
0.4777……×90=47-4
所以, 0.4777……=43/90
0.325656……×100=32.5656……①
0.325656……×10000=3256.56……②
用②-①即得:
0.325656……×9900=3256.5656……-32.5656……
0.325656……×9900=3256-32
所以, 0.325656……=3224/9900=806/2475
根据以上便直接可一写出公式:
无循环时:直接将 小数部分*10^n / 10^n 约分即可
有循环时:(整个小数*10^a - 非循环部分*10^b)/(10^a-10^b) 约分即可
代码如下
#include<iostream> #include<string> #include<cstring> #include<sstream> #include<cmath> using namespace std; int zz(int x, int y) //求最大公约数 { int z=y%x; while (z) { y = x; x = z; z = y%x; } return x; } int main() { int n; cin >> n; while (n--) { string str; cin >> str; int num1 = 0; int num2 = 0; int pos = 0; for (int i = 2; i < str.length(); i++) { if (str[i] != '('&&!pos) num1 = num1 * 10 + str[i] - '0'; //记录 循环小数非循环部分*10^b 非循环小数则记录 整体*10^n else if (str[i] == '(') { pos = i; //记下'('的位置 num2 = num1; } else if(str[i]!=')') { num2 = num2 * 10 + str[i] - '0'; //记录 循环小数整体*10^a } } if (num2==0) { int fz = num1; int fm = pow(10, str.length() - 2); int gcm=zz(fz, fm); cout << fz/gcm << "/" << fm/gcm << endl; } else { int fz = num2-num1; int fm =pow(10,str.length()-4)-pow(10,pos-2); int gcm = zz(fz,fm); cout << fz/gcm << "/" << fm/gcm << endl; } } return 0; }
相关文章推荐
- Storm Trident Example 代码阅读笔记
- Mysql数据库笔记
- ACM学习历程—HDU 5289 Assignment(线段树 || RMQ || 单调队列)
- Ubuntu mysql 中文,启动,重启,远程连接相关问题
- 简单文件操作(库函数)
- poj 3254
- windows下安装php5.5的redis扩展
- java定时任务spring+quartz作业调度
- 管道破裂信号处理。
- SAX解析技术
- javascript笔试面试题
- Python日志之Python函数
- 2015年ALPC暑期专题练习I (计算几何) G - Treasure Hunt
- Java基础的一些博客
- BZOJ 1026 [SCOI2009]windy数 数位DP?
- JavaScript继承方式详解
- 科研方向的选择
- java反射机制入门04
- crash log调用栈看不到的解决方案(debug symbols不起作用)
- STM32CUBEMX——HAL库使用注意事项