libros - porque aprender lua
Suma de los dígitos de un entero en lua (4)
Vi una pregunta como esta relacionada con Java y C, pero estoy usando LUA. Las respuestas podrían haberse aplicado a mí, pero no las estaba entendiendo.
¿Podría alguien decirme cómo obtendría la suma de los dígitos individuales de un Entero? Por ejemplo.
a = 275
aSum = 2+7+5
Si pudiera explicar cómo lograría esto en LUA y por qué el código hace lo que hace, eso sería muy apreciado.
Puede obtener un mejor rendimiento que gmatch (no verificado) con:
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
Puedes usar esta función:
function sumdigits(n)
local sum = 0
while n > 0 do
sum = sum + n%10
n = math.floor(n/10)
end
return sum
end
En cada iteración agrega el último dígito de n a la suma y luego la corta desde n, hasta que suma todos los dígitos.
Realmente una función simple. El uso de Gmatch lo llevará a donde necesita ir.
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
Básicamente, estás recorriendo los enteros y jalándolos uno por uno para sumarlos al total. El "% d" significa solo un dígito, por lo que string.gmatch (str, "% d") dice, "Match one digit each time". El "para" es el mecanismo de bucle, por lo que para cada dígito de la cadena, se sumará al total.
aSum = -load((''return''..a):gsub(''%d'',''-%0''))()