문제

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.

도움이 되었습니까?

해결책 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.

다른 팁

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top