【发布时间】:2014-04-06 12:17:11
【问题描述】:
我看到一个与 Java 和 C 相关的问题,但我使用的是 LUA。答案可能适用于我,但我不理解它们。
有人可以告诉我如何获得整数的各个数字的总和。 例如。
a = 275
aSum = 2+7+5
如果您能解释一下我将如何在 LUA 中实现这一点,以及为什么代码能做到这一点,我们将不胜感激。
【问题讨论】:
标签: lua integer sum add digits
我看到一个与 Java 和 C 相关的问题,但我使用的是 LUA。答案可能适用于我,但我不理解它们。
有人可以告诉我如何获得整数的各个数字的总和。 例如。
a = 275
aSum = 2+7+5
如果您能解释一下我将如何在 LUA 中实现这一点,以及为什么代码能做到这一点,我们将不胜感激。
【问题讨论】:
标签: lua integer sum add digits
你可以使用这个功能:
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 中删除,直到它对所有数字求和。
【讨论】:
真的是一个简单的功能。使用 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 代替.?
%d 只会选择数字。只要sumdigits 获得数字输入,您的. 就可以正常工作。
aSum = -load(('return'..a):gsub('%d','-%0'))()
【讨论】:
您可能会获得比 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
【讨论】: