杭电 ACM steps 218结题报告.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:4 大小:19KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

杭电 ACM steps 218结题报告.doc

杭电ACMsteps218结题报告.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

2.2.8解题报告#include<iostream>#include<string>usingnamespacestd;intgcd(inta,intb){inttemp;if(a<b)swap(a,b);while(a%b){temp=a%b;a=b;b=temp;}returnb;}intmain(){intn,i,j,len,s1,s2,p1,p2;intt1,t2,t;chardecimal[30];while(cin>>n){for(i=0;i<n;i++){cin>>decimal;len=strlen(decimal);j=0;while(decimal[j]!='.'&&i<len)j++;j++;s1=0;p1=1;while(decimal[j]!='('&&i<len){s1=s1*10+decimal[j]-'0';j++;p1=p1*10;}j++;s2=0;p2=1;while(decimal[j]!=')'&&i<len){s2=s2*10+decimal[j]-'0';j++;p2=p2*10;}if(s2){t1=s1*(p2-1)+s2;t2=p1*(p2-1);}else{t1=s1;t2=p1;}t=gcd(t1,t2);cout<<t1/t<<"/"<<t2/t<<endl;}}return0;}这个题是把小数化为分数的问题,实际上就是考字符串数组的再加上求最大公约数的一个问题。首先要定义两个数,做为分子和分母,再要判断这个字符串中的点后的元素是否有括号,如没有说明是一个有限小数,这是最好化的。把分母赋值1不断乘以10,把小数点后的数作为分子,再约分即可。那么约分怎做呢?就是求分子分母的最大公约数,然后把分子分母同时除以最大公约数后作为新的分子分母,即为所化分数。如有括号,就把分母多减去一个1即可。