首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将重复的十进制转换为分数

将重复的十进制转换为分数
EN

Code Golf用户
提问于 2014-01-07 18:50:24
回答 14查看 3.9K关注 0票数 24

这个问题不需要仅适用于终止小数-重复小数也可以通过算法转换为分数。

您的任务是制作一个以重复小数作为输入的程序,并输出相应的分子和分母(以最低的术语表示),从而产生十进制扩展。大于1的分数应表示为不正确的分数,如9/5。你可以假设输入是正的。

重复的小数点将以这种格式表示:

代码语言:javascript
复制
5.3.87

第二个圆点之后的每一件事都重复了下来,如下所示:

代码语言:javascript
复制
5.3878787878787...

您的程序将输出两个表示分子和分母的整数,用斜杠分隔(如果不输出纯文本,则用您的语言中的等效形式):

代码语言:javascript
复制
889/165

请注意,结束小数将没有在第二个点之后,小数和没有重复小数部分将没有在这两个点之间。

测试用例

这些测试用例涵盖了所有需要的角用例:

代码语言:javascript
复制
0..3 = 1/3
0.0.3 = 1/30
0.00.3 = 1/300
0.6875. = 11/16
1.8. = 9/5
2.. = 2/1
5..09 = 56/11
0.1.6 = 1/6
2..142857 = 15/7
0.01041.6 = 1/96
0.2.283950617 = 37/162
0.000000.1 = 1/9000000
0..9 = 1/1
0.0.9 = 1/10
0.24.9 = 1/4

如果你愿意的话,你也可以假设没有整数部分的分数在第一个点的左边没有任何东西。您可以使用这些可选的测试用例对其进行测试:

代码语言:javascript
复制
.25. = 1/4
.1.6 = 1/6
..09 = 1/11
.. = 0/1
EN

回答 14

Code Golf用户

发布于 2014-03-14 18:23:35

C,171

相当长的时间。可能会进一步减少。没有scanf,如果在点之间没有任何数字的话,它真的无法处理。没有strtol。只是数字计算:

代码语言:javascript
复制
a,b,c,d,q;main(){while((q=getchar()-48)>-3)q<0?(d=b>0,b+=!b):d?(c=c*10+q,d*=10):(a=a*10+q,b*=10);for(a=a*--d+c,q=b*=d;q>1;a%q+b%q?--q:(a/=q,b/=q));printf("%d/%d\n",a,b);}

测试:

代码语言:javascript
复制
rfc <<< "2..142857"
15/7
票数 5
EN

Code Golf用户

发布于 2014-03-15 15:58:45

Javascript,203

太久了,但还是很有趣。因为分号是不可读的。

代码语言:javascript
复制
s=prompt(b=1).split(".")
P=Math.pow
a=s[0]
c=s[1]
d=P(10,l=c.length)
f=(P(10,s[2].length)-1)*P(10,l)||1
e=s[2]=+s[2]
a=d*a+b*c;b*=d
a=f*a+b*e;b*=f
function g(a,b){return b?g(b,a%b):a}g=g(a,b);a/g+"/"+b/g
票数 4
EN

Code Golf用户

发布于 2014-03-16 13:24:15

J (不同方法)

另一种基于非常不同的方法的解决方案;这一次它是完全通用的;只有在提交整数时缺少1分母:

代码语言:javascript
复制
   ".((({.~(i.&1)),'+'"_,((":@(10&^)@#,'%~',])@}.@#~~:/\),'+%',((,~(##'9'"_),'%x:0'"_)@}.@#~2:=+/\@]))(=&'.')) '.1.3'
2r15
   ".((({.~(i.&1)),'+'"_,((":@(10&^)@#,'%~',])@}.@#~~:/\),'+%',((,~(##'9'"_),'%x:0'"_)@}.@#~2:=+/\@]))(=&'.')) '.1.'
1r10
   ".((({.~(i.&1)),'+'"_,((":@(10&^)@#,'%~',])@}.@#~~:/\),'+%',((,~(##'9'"_),'%x:0'"_)@}.@#~2:=+/\@]))(=&'.')) '1..'
1
   ".((({.~(i.&1)),'+'"_,((":@(10&^)@#,'%~',])@}.@#~~:/\),'+%',((,~(##'9'"_),'%x:0'"_)@}.@#~2:=+/\@]))(=&'.')) '1..3'
4r3
票数 3
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/17907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档