hdu1717小数化分数2
2015-08-17 18:56
253 查看
题目(http://acm.hdu.edu.cn/showproblem.php?pid=1717)
(100-1)×0.4747……=47
即99×0.4747…… =47
那么 0.4747……=47/99
(10-1) ×0.33……=3
即9×0.33……=3
那么0.33……=3/9=1/3
由此可见, 纯循环小数化分数,它的小数部分可以写成这样的分数:纯循环小数的循环节最少位数是几,分母就是由几个9组成的数;分子是纯循环小数中一个循环节组成的数。
用②-①即得:
0.4777……×90=47-4
所以, 0.4777……=43/90
用②-①即得:
0.325656……×9900=3256.5656……-32.5656……
0.325656……×9900=3256-32
所以, 0.325656……=3224/9900
将纯循环小数改写成分数,分子是一个循环节的数字组成的数;分母各位数字都是9,9的个数与循环节中的数字的个数相同.
将混循环小数改写成分数,分子是不循环部分与第一个循环节连成的数字组成的数,减去不循环部分数字组成的数之差;分母的头几位数字是9,末几位数字是0,9的个数跟循环节的数位相同,0的个数跟不循环部分的数位相同.
这个代码就是根据这个写的。。
第一次写,代码十分冗长。。
⑴ 把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
将纯循环小数改写成分数,分子是一个循环节的数字组成的数;分母各位数字都是9,9的个数与循环节中的数字的个数相同.
将混循环小数改写成分数,分子是不循环部分与第一个循环节连成的数字组成的数,减去不循环部分数字组成的数之差;分母的头几位数字是9,末几位数字是0,9的个数跟循环节的数位相同,0的个数跟不循环部分的数位相同.
这个代码就是根据这个写的。。
第一次写,代码十分冗长。。
#include <iostream> #include <cmath> #include <cstring> using namespace std; typedef long long LL; LL gcd(LL a,LL b) { if(b==0) return a; else return gcd(b,a%b); } int main() {int t; cin>>t; char s[100]; while(t--) { LL fenzi=0,fenmu=0,tmp; cin>>s; int len=strlen(s); for(int i=0;i<len;i++) { if(s[i]=='.'&&s[i+1]=='(') { fenmu=(LL)pow(10.0,1.0*(len-4))-1; for(int j=3;j<len-1;j++) { if(s[j]>='0'&&s[j]<='9') { fenzi*=10; fenzi+=(s[j]-'0'); } } tmp=gcd(fenzi,fenmu); fenzi/=tmp;fenmu/=tmp; cout<<fenzi<<"/"<<fenmu<<endl; break; } if(s[len-1]!=')') { fenmu=(LL)pow(10.0,1.0*(len-2)); //cout<<fenmu<<endl;break; for(int j=2;j<len;j++) { fenzi*=10; fenzi+=(s[j]-'0'); }//cout<<len<<endl; //cout<<fenzi<<endl;break; tmp=gcd(fenzi,fenmu); fenzi/=tmp;fenmu/=tmp; cout<<fenzi<<"/"<<fenmu<<endl; break; } if(s[2]!='('&&s[len-1]==')') { LL len1,len2,tmp1=0,tmp2=0; len2=len-4; for(int j=2;s[j]!='(';j++) len1=j-1; //cout<<len2<<" "<<len1<<endl; fenmu=(LL)pow(10.0,1.0*len2)-(LL)pow(10.0,1.0*len1); //cout<<fenmu<<endl;break; for(int j=2;s[j]!='(';j++) { tmp1*=10; tmp1+=(s[j]-'0'); } for(int j=2;j<len;j++) { if(s[j]=='('||s[j]==')') continue; tmp2*=10; tmp2+=(s[j]-'0'); } fenzi=tmp2-tmp1; //cout<<fenzi<<endl;break; tmp=gcd(fenzi,fenmu); fenzi/=tmp;fenmu/=tmp; cout<<fenzi<<"/"<<fenmu<<endl; break; } } } return 0; }
相关文章推荐
- Leetcode 58 Length of Last Word
- Java序列化及反序列化 示例讲解
- SettingsProvider 它SettingsCache
- Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别
- hdu 5381 莫队算法/gcd
- [dfs]poj2718 Smallest Difference
- 如何绘制虚线
- php&&memcache
- php&&memcache
- Hive视图
- php&&页面静态化
- linux 下常用命令
- Android开发环境搭建与HelloWorld
- day0817-Android开发环境搭建
- python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹
- php&&页面静态化
- Redis:BGSAVE出错原因分析
- hdu 2084 数塔
- 解密SVM系列(一):关于拉格朗日乘子法和KKT条件
- JAVA多线程 问题 转载