整数各位数字之和 Lua 实现

我看到有关Java和C的类似问题,但我正在使用LUA。这些答案可能适用于我,但我并不理解它们。

请问如何获取整数的各个数字之和。 例如。

a = 275
aSum = 2+7+5

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

点赞
用户308010
用户308010

非常简单的函数。使用 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" 是循环机制,所以对于字符串中的每个数字,它将加到总数中。

2014-03-04 19:30:58
用户869951
用户869951

你可能会比 gmatch (未验证) 获得更好的表现:

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
2014-03-04 19:59:16
用户2733013
用户2733013

你可以使用下面的函数:

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

在每次迭代中,它将 n 的最后一位加到 sum 中,然后从 n 中削减,直到它将所有位数相加。

2014-03-04 20:15:18
用户1847592
用户1847592
`aSum = -load(('return'..a):gsub('%d','-%0'))()`

aSum = -load(('return'..a):gsub('%d','-%0'))() 的翻译为:将 a 中的所有数字转换成负数,然后将其拼接为一个返回语句,再将结果加载进来并执行,最后将结果取反并赋值给 aSum

2014-03-04 20:15:39