Question

I saw a question like this relating to Java and C, but I am using LUA. The answers might have applied to me, but I wasn't understanding them.

Could someone please tell me how I would get the sum of the individual digits of an Integer. For Example.

a = 275
aSum = 2+7+5

If you could explain how I would achieve this in LUA and why the code does what it does, that would be greatly appreciated.

Was it helpful?

Solution 2

Really a simple function. Using gmatch will get you where you need to go.

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

Basically, you're looping through the integers and pulling them out one by one to add them to the total. The "%d" means just one digit, so string.gmatch(str, "%d") says, "Match one digit each time". The "for" is the looping mechanism, so for every digit in the string, it will add to the total.

OTHER TIPS

You can use this function:

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

On each iteration it adds the last digit of n to the sum and then cuts it from n, until it sums all the digits.

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

You might get better performance than gmatch (not verified) with:

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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top