cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 4992|回复: 5

[Nspire] 求助!醒目!编程遇到了瓶颈,请帮忙看看怎么找循环节!

[复制链接]
发表于 2016-7-1 13:12:31 | 显示全部楼层 |阅读模式
是这样的,a/b

文档1 fb.tns

3.35 KB, 下载次数: 14

 楼主| 发表于 2016-7-1 13:18:39 | 显示全部楼层
a/b可以得到无限循环小数,比如1/243=0.00411522633744855......
我想编程在这个字符串中找到循环节


之前试过的方法如下:
For i,1,dim(s)
  For j,i+1,dim(s)
IF mid(s,i,5)=mid(s,j,5)
   mid(s,i,j-1)->xunhuanjie
  EndFor
EndFor

但这种算法更本应对不了短循环节:
如 0.333333......循环节判断为“33333”

还有可能遇到碰巧相同的情况:
如混循环小数
07-01-2016 图像 001.jpg
 楼主| 发表于 2016-7-1 13:19:17 | 显示全部楼层
不知道坛友有什么好方法没有
发表于 2016-7-1 16:36:05 | 显示全部楼层
本帖最后由 超越说 于 2016-7-1 16:42 编辑

小数精度有限。。。
如果不需要处理字符串的话,建议直接用数学方法解决。。。下面这个只能做纯循环。
  1. Define test(number)=
  2. Func
  3.   Local m,n
  4.   m:=0.1
  5.   n:=9
  6.   While mod(m,1)≠0
  7.     m:=number*n
  8.     n:=n*10+9
  9.   EndWhile
  10.   Return m
  11. EndFunc
复制代码

 楼主| 发表于 2016-7-6 15:43:14 | 显示全部楼层
超越说 发表于 2016-7-1 16:36
小数精度有限。。。
如果不需要处理字符串的话,建议直接用数学方法解决。。。下面这个只能做纯循环。

谢谢,不过我希望模拟一下真实的小学生的计算。
发表于 2016-7-8 20:08:55 | 显示全部楼层
要找循环节需要先写无限精度小数计算...用 basic 就有点捉鸡了

请参考此段代码 http://pastebin.ubuntu.com/18781200/

可以直接把结果存入字符串,然后再搜索,不过目测会很占内存
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-11-22 12:39 , Processed in 0.083372 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表