HDU 1717 - 小数化分数2
来源:互联网 发布:java中日期格式的转换 编辑:程序博客网 时间:2024/04/20 00:21
整数化小数,不循环的小数容易化。对于循环小数化分数原理如下:
⑴ 把0.4747……和0.33……化成分数。例1: 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
例2: 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
由此可见, 纯循环小数化分数,它的小数部分可以写成这样的分数:纯循环小数的循环节最少位数是几,分母就是由几个9组成的数;分子是纯循环小数中一个循环节组成的数。⑵把0.4777……和0.325656……化成分数。例1:0.4777……×10=4.777……①0.4777……×100=47.77……②用②-①即得: 0.4777……×90=47-4所以, 0.4777……=43/90例2: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
根据原理,易写出代码。
代码如下:
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>using namespace std;int gcd(int a, int b){ return b == 0 ? a : gcd(b, a%b);}int main(){#ifdef test freopen("sample.txt", "r", stdin);#endif int t, num_1, num_2; char str[22], str_1[11], str_2[11]; scanf("%d", &t); while(t--) { int i, Gcd; int len_1=0, len_2=0; scanf("%s", str); for(i=2; str[i]!='(' && str[i]!='\0'; i++) str_1[len_1++] = str[i]; // 小数不循环部分存储 for(; str[i]!=')' && str[i]!='\0'; i++) if(str[i] != '(') str_2[len_2++] = str[i]; // 小数循环部分存储 str_1[len_1] = str_2[len_2] = '\0'; if(!len_2) // 没有循环小数情况 { int beishu = 1; for(int i=0; i<len_1; i++) beishu *= 10; sscanf(str_1, "%d", &num_1); Gcd = gcd(num_1, beishu); printf("%d/%d\n", num_1/Gcd, beishu/Gcd); } else // 有循环小数情况 { int bei1 = 1, bei2 = 1; str[0]=0; sprintf(str, "%s%s", str_1, str_2); sscanf(str, "%d", &num_2); if(len_1) sscanf(str_1, "%d", &num_1); else num_1=0; for(int i=0; i<len_1; i++) bei1 *= 10; for(int i=0; i<len_2+len_1; i++) bei2 *= 10; Gcd = gcd(num_2-num_1, bei2-bei1); printf("%d/%d\n", (num_2-num_1)/Gcd, (bei2-bei1)/Gcd); } //printf("&& %d\n", (32692307-32)/gcd(32692307-32, 100000000-100)); } return 0;}
- hdu 1717 小数化分数2
- hdu 1717 --小数化分数2
- hdu 1717小数化分数2
- hdu 1717小数化分数2
- HDU 1717 - 小数化分数2
- HDU 1717 小数化分数2
- hdu 1717 小数化分数2
- hdu 1717 --小数化分数2
- HDU 1717 小数化分数2
- hdu 1717 小数化分数2
- hdu 1717 小数化分数2
- Hdu 1717 小数化分数2
- HDU 1717 小数化分数2
- HDU 1717 小数化分数2
- HDU 1717 小数化分数2
- HDU 1717 小数化分数2
- hdu---1717小数化分数2
- hdu 1717 小数化分数2
- android中动画实现的两种方式
- 设置NSZombieEnabled和MallocStackLogging
- java 下载文件的方法
- 开源jxls - java导Excel(多sheet) - 模板文件定义类似jsp的el表达式
- ERROR: Res2Exe: Res2Res: ERROR: Line: 267 File: ...../checksum.cpp错误
- HDU 1717 - 小数化分数2
- 将h.264视频流封装成flv格式文件(一.flv格式)
- libxml/HTMLparser.h file not found 解决方法
- java 下载文件的方法(2)
- 开发过程中理解用户体验的特性
- 学习笔记——操作系统_Linux进程通信之消息队列
- 将h.264视频流封装成flv格式文件(二.开始动手)
- Dungeon Master bfs
- 引用变量和引用数组