【问题标题】:List a number's digits in J在 J 中列出一个数字的数字
【发布时间】:2013-07-16 12:57:02
【问题描述】:

我使用编程语言:J.

我想把一个数字的所有数字放在一个列表中。

发件人:

12345

到:

1 2 3 4 5

我能做什么?

【问题讨论】:

  • 将 int 转换为字符串,而不是在字符串长度的循环中,获取每一个。或者在结果大于 10 时将 int 除为 10。
  • 如何将单打元素附加到列表中?并带有隐式函数?(没有 for 循环)
  • 可能是您的编程语言具有将字符串拆分为数组的相同方法。
  • 这是个问题:这个方法是什么? :)

标签: list numbers type-conversion j


【解决方案1】:

我会这样写

   10&#.^:_1 

我们可以在这句话中看到:

   (10&#.^:_1) 123456789 
1 2 3 4 5 6 7 8 9

该程序依赖于 Base 内置的重塑功能。它使用 Base 的(内置)正面作为 Antibase 的同义词。

【讨论】:

    【解决方案2】:

    我找到了答案:

    intToList =: (".@;"0@":)
    

    【讨论】:

      【解决方案3】:

      另一种方法:

      intToList =: 3 : '((>. 10 ^. y)#10) #: y'
      

      这不会转换为字符串并返回,这可能会很昂贵,但会使用以 10 为底的日志来计算数字,然后使用反基 (#:) 来获取每个数字。

      编辑:

      基于 Dan Bron 评论的更好、更安全的版本:

      intToList =: 3 : '10 #.^:_1 y'
      

      【讨论】:

      • 是的,这是一个不错的方法。请注意,当 y 为 0 或 10 的幂时,短语(>. 10 ^. y) 有一个小缺陷:试试intToList 0intToList 1000。我们可以通过直接使用#: 的反函数来改进解决方案,如10 #.^:_1 y 或从其实现中获取提示并将intToList 重写为3 : '1 + 10 <.@^. 1 >. y'
      • 虽然不支持底片
      • Nor 数组(> 标量)。为了解决这个问题,我们不妨采用10&#.^:_1 建议的完整定义(正如@kaleidic 建议的那样)。 10&#. b. _1 ($&10@>:@(10&(<.@^.))@(1&>.)@(>./)@:|@, #: ]) :.(10&#.)。或者,作为可重复使用的动词:10&$: : (>:@:<.@:^. 1 >. >./@:|@:,)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      相关资源
      最近更新 更多