首页 > 解决方案 > 如何使用 SML 解决数字根

问题描述

我在编写一个计算整数数字根的函数时遇到了麻烦。考虑取一个数字“n”的过程,添加它的数字,然后添加从它派生的数字的数字,等等,直到剩下的数字只有一个数字。最后一位数称为“n”的数字根。比如从6381开始得到的序列是(6381,18,9),所以6381的数字根是9。我的代码:

fun digits(m:int) =
  if m < 10 then
    [m]
  else 
    let
      val smallestDigit = m mod 10
      val remainingDigits = m div 10
    in
      digits remainingDigits @ [smallestDigit]
    end
   

fun sum(ints) =
    if null ints then 0
    else
    (hd ints) + sum(tl ints)                              
                              
fun digitalRoot(i:int) =
    let
       val results = sum(digits i)
    in
       results
    end      

我的代码仅部分有效。它得到 18,但我也无法得到 18 的总和。

标签: sml

解决方案


推荐阅读