Sum the digits of a number

后端 未结 18 1975
抹茶落季
抹茶落季 2020-11-22 10:52

If I want to find the sum of the digits of a number, i.e.:

  • Input: 932
  • Output: 14, which is (9 + 3 + 2)
相关标签:
18条回答
  • 2020-11-22 10:59
    def digitsum(n):
        result = 0
        for i in range(len(str(n))):
            result = result + int(str(n)[i:i+1])
        return(result)
    

    "result" is initialized with 0.

    Inside the for loop, the number(n) is converted into a string to be split with loop index(i) and get each digit. ---> str(n)[i:i+1]

    This sliced digit is converted back to an integer ----> int(str(n)[i:i+1])

    And hence added to result.

    0 讨论(0)
  • 2020-11-22 11:00

    This might help

    def digit_sum(n):
        num_str = str(n)
        sum = 0
        for i in range(0, len(num_str)):
            sum += int(num_str[i])
        return sum
    
    0 讨论(0)
  • 2020-11-22 11:04

    Both lines you posted are fine, but you can do it purely in integers, and it will be the most efficient:

    def sum_digits(n):
        s = 0
        while n:
            s += n % 10
            n //= 10
        return s
    

    or with divmod:

    def sum_digits2(n):
        s = 0
        while n:
            n, remainder = divmod(n, 10)
            s += remainder
        return s
    

    Even faster is the version without augmented assignments:

    def sum_digits3(n):
       r = 0
       while n:
           r, n = r + n % 10, n // 10
       return r
    

    > %timeit sum_digits(n)
    1000000 loops, best of 3: 574 ns per loop
    
    > %timeit sum_digits2(n)
    1000000 loops, best of 3: 716 ns per loop
    
    > %timeit sum_digits3(n)
    1000000 loops, best of 3: 479 ns per loop
    
    > %timeit sum(map(int, str(n)))
    1000000 loops, best of 3: 1.42 us per loop
    
    > %timeit sum([int(digit) for digit in str(n)])
    100000 loops, best of 3: 1.52 us per loop
    
    > %timeit sum(int(digit) for digit in str(n))
    100000 loops, best of 3: 2.04 us per loop
    
    0 讨论(0)
  • 2020-11-22 11:07
    num = 123
    dig = 0
    sum = 0
    while(num > 0):
      dig = int(num%10)
      sum = sum+dig
      num = num/10
    

    print(sum) // make sure to add space above this line

    0 讨论(0)
  • 2020-11-22 11:08

    Found this on one of the problem solving challenge websites. Not mine, but it works.

    num = 0            # replace 0 with whatever number you want to sum up
    print(sum([int(k) for k in str(num)]))
    
    0 讨论(0)
  • 2020-11-22 11:10

    Here is a solution without any loop or recursion but works for non-negative integers only (Python3):

    def sum_digits(n):
        if n > 0:
            s = (n-1) // 9    
            return n-9*s
        return 0
    
    0 讨论(0)
提交回复
热议问题