分数与小数的相互转换(模拟)
2012-08-08 18:15
330 查看
小数转化为分数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1717
题意:把小数转化为分数,循环部分用()表示。
分数转化为小数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2522
定理:有理数a/b (其中0<a<b,(a,b)=1)能表示成纯循环小数的充要条件是(b,10)=1
定理:有理数a/b, 0<a<b, (a,b)=1,b=(2^α)*(5^β)*b1, (b1,10)=1,b1不等于1,α,β不全为零,则a/b可以表示为纯
循环小数,其不循环的位数为u = max(α,β)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1717
题意:把小数转化为分数,循环部分用()表示。
void Work(char str[]) { int len = strlen(str); LL a = 0; LL b = 0; int cnt1 = 0; int cnt2 = 0; for(int i=2;i<len;i++) { if(str[i] == '(') break; a = a * 10 + str[i] - '0'; cnt1++; } bool flag = false; for(int i=2;i<len;i++) { if(str[i] == '(' || str[i] == ')') { flag = true; continue; } b = b * 10 + str[i] - '0'; cnt2++; } cnt2 -= cnt1; LL p = b - a; LL q = 0; if(!flag) { p = b; q = 1; cnt2 = 0; } for(int i=0;i<cnt2;i++) q = q * 10 + 9; for(int i=0;i<cnt1;i++) q = q * 10; LL g = gcd(p,q); p /= g; q /= g; cout<<p<<"/"<<q<<endl; }
分数转化为小数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2522
定理:有理数a/b (其中0<a<b,(a,b)=1)能表示成纯循环小数的充要条件是(b,10)=1
定理:有理数a/b, 0<a<b, (a,b)=1,b=(2^α)*(5^β)*b1, (b1,10)=1,b1不等于1,α,β不全为零,则a/b可以表示为纯
循环小数,其不循环的位数为u = max(α,β)
void Work(int n) { bool flag = 0; int ans ,f ; memset(ans,0,sizeof(ans)); memset(f,0,sizeof(f)); if(n < 0) { n = -n; flag = 1; } int k = 1; f[k] = 1; int cnt = 0; while(k && n != 1) { k *= 10; ans[cnt++] = k / n; k %= n; if(f[k]) break; f[k] = 1; } if(flag) printf("-"); if(n == 1) puts("1"); else { printf("0."); for(int i=0;i<cnt;i++) printf("%d",ans[i]); puts(""); } }
相关文章推荐
- 分数与小数的相互转换
- 小数转换分数
- HDU 2522 & AOJ 441 & AOJ 364 关于小数和分数的转换
- 十进制小数与二进制的相互转换
- Decimal To Fraction 小数转换成分数
- 分数转小数(模拟)
- Java将小数形式转换成分数形式
- Python实现的十进制小数与二进制小数相互转换功能
- 十进制小数分数与二进制的转换
- Python 实现小数和百分数的相互转换
- 模拟分数的小数部分
- 如何将无限循环小数转换为分数
- 将无限循环小数转换成分数形式
- 分数转换成小数
- 十进制与二进制相互转换(包括带小数点.各类进制转换公式)
- 我的程序(6):分数小数互相转换
- 分数转小数(模拟)
- HDU2522(分数化小数,简单的模拟)
- 如何编写一个小数转换分数的函数?