Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lua中整数的位数之和_Lua_Integer_Sum_Add_Digits - Fatal编程技术网

lua中整数的位数之和

lua中整数的位数之和,lua,integer,sum,add,digits,Lua,Integer,Sum,Add,Digits,我看到了一个与Java和C相关的问题,但我使用的是LUA。答案可能适用于我,但我不理解 有人能告诉我如何得到整数的各个数字之和吗。 比如说 a = 275 aSum = 2+7+5 如果您能解释我将如何在LUA中实现这一点,以及为什么代码会这样做,我们将不胜感激。这真是一个简单的函数。使用gmatch会让你到达你需要去的地方 function sumdigits(str) local total = 0 for digit in string.gmatch(str, "%d") do

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

有人能告诉我如何得到整数的各个数字之和吗。 比如说

a = 275
aSum = 2+7+5

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

这真是一个简单的函数。使用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”是循环机制,因此对于字符串中的每个数字,它都将添加到总数中。

您可能会获得比gmatch(未验证)更好的性能,包括:


您可以使用此功能:

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中减去,直到对所有数字求和为止

aSum=-load(('return'..a):gsub('%d','-%0'))()
使用
%d
而不是
%d才会选择数字。只要
sumdights
获得数字输入,你的
也会工作。是的,我只是想说“有一种更容易获得数字的方法,我不记得了。”我可能会在很久以后找到它,但是现在不用担心了。很高兴看到你终于发布了答案而不是评论。@hjpotter92-这不会永远持续下去:-)+1。我不知道为什么人们总是发布那些“将其转换为字符串并分别转换每个数字”的方法;这更有效。
function sumdigits(n)
   local sum = 0
   while n > 0 do
      sum = sum + n%10
      n = math.floor(n/10)
   end
   return sum
end