【问题标题】:Sum of the digits of an integer in lualua中整数的位数之和
【发布时间】:2014-04-06 12:17:11
【问题描述】:

我看到一个与 Java 和 C 相关的问题,但我使用的是 LUA。答案可能适用于我,但我不理解它们。

有人可以告诉我如何获得整数的各个数字的总和。 例如。

a = 275
aSum = 2+7+5

如果您能解释一下我将如何在 LUA 中实现这一点,以及为什么代码能做到这一点,我们将不胜感激。

【问题讨论】:

    标签: lua integer sum add digits


    【解决方案1】:

    你可以使用这个功能:

    function sumdigits(n)
       local sum = 0
       while n > 0 do
          sum = sum + n%10
          n = math.floor(n/10)
       end
       return sum
    end
    

    在每次迭代中,它将 n 的最后一位添加到总和中,然后将其从 n 中删除,直到它对所有数字求和。

    【讨论】:

    • +1。我不知道为什么人们一直在发布那些“将其转换为字符串并分别对每个数字进行字符串化”的方法;这更高效。
    【解决方案2】:

    真的是一个简单的功能。使用 gmatch 将带您到达您需要去的地方。

    function sumdigits(str)
      local total = 0
      for digit in string.gmatch(str, "%d") do
      total = total + digit
      end
      return total
    end
    
    print(sumdigits(1234))
    
    10
    

    基本上,您循环遍历整数并将它们一一拉出以将它们添加到总数中。 "%d" 仅表示一位数字,因此 string.gmatch(str, "%d") 表示“每次匹配一位数字”。 “for”是循环机制,所以对于字符串中的每个数字,它都会添加到总数中。

    【讨论】:

    • 使用%d 代替.?
    • 噢!我知道我错过了什么,哈哈。谢谢,hjpotter92!
    • 你没有遗漏任何东西。只是%d 只会选择数字。只要sumdigits 获得数字输入,您的. 就可以正常工作。
    • 是的,我的意思是遗漏了一些内容,例如“有一种更简单的方法来获取数字,不记得了。”我可能会在很久以后找到它,但现在不必担心。
    【解决方案3】:

    aSum = -load(('return'..a):gsub('%d','-%0'))()

    【讨论】:

    • 很高兴看到你终于发布了答案而不是 cmets。
    • @hjpotter92 - 它不会永远持续下去 :-)
    【解决方案4】:

    您可能会获得比 g​​match(未验证)更好的性能:

    function sumdigits(str)
      local total = 0
      for i=1,#str do 
         total = total + tonumber(string.sub(str, i,i))
      end
      return total
    end
    print(sumdigits('1234'))
    10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 2011-05-27
      • 2016-07-03
      • 2020-04-20
      相关资源
      最近更新 更多