Sum the digits of a number

后端 未结 18 1998
抹茶落季
抹茶落季 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 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
    

提交回复
热议问题