总和号码的数字 - 蟒蛇(Sum the digits of a number - python)

2019-07-20 02:50发布

如果我想找到的数量,即数字的总和:

  • 输入: 932
  • 输出: 14 ,其是(9 + 3 + 2)

什么是这样做的最快的方法?

我本能地做:

sum(int(digit) for digit in str(number))

我发现这个在线:

sum(map(int, str(number)))

这是最好用的速度,以及是否有任何其他的方法,这是更快?

Answer 1:

您可以在整数纯粹做到这一点,这将是最有效的:

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

divmod

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

但是你贴两条线都很好。

 

即使是快不增加作业的版本:

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


Answer 2:

如果你想保持总结数字,直到你得到一个位数的号码 ,你可以做(我最喜欢的9整除的数的特征之一):

def digital_root(n):
    x = sum(int(digit) for digit in str(n))
    if x < 10:
        return x
    else:
        return digital_root(x)

这实际上证明是相当快本身...

%timeit digital_root(12312658419614961365)

10000 loops, best of 3: 22.6 µs per loop


Answer 3:

这可能帮助

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


Answer 4:

这样做我解决了这个像一些Codecademy网站的挑战:

def digit_sum(n):
arr = []
nstr = str(n)
for x in nstr:
    arr.append(int(x))
return sum(arr)


Answer 5:

您也可以使用此:

def sum_digits(num):
    num = str(num)
    digitSum = 0
    for i in num:
        digitSum += int(i)
    return digitSum
print sum_digits(875)


Answer 6:

def digitsum(n):
    result = 0
    for i in range(len(str(n))):
        result = result + int(str(n)[i:i+1])
    return(result)

“结果”被初始化为0。

内部的for循环中,数目(n)被转换成与环索引(i)被分割,并获得各数位的字符串。 ---> STR(N)[I:+ 1]

此切片数字转换回的整数----> INT(STR(N)[I:+ 1])

因此增加所导致的。



Answer 7:

def sumOfDigits():

    n=int(input("enter digit:")) 
    sum=0
    while n!=0 :

        m=n%10
        n=n/10
        sum=int(sum+m)

    print(sum)

sumOfDigits()


Answer 8:

你也可以用built_in_function称为divmod试试这个();

number = int(input('enter any integer: = '))
sum = 0
while number!=0: 
    take = divmod(number, 10) 
    dig = take[1] 
    sum += dig 
    number = take[0] 
print(sum) 

你可以采取任何数量的数字



Answer 9:

在解决问题的挑战的一个网站找到的。 不是我的,但它的作品。

num = 0 #replace 0 with whatever number you want to sum up print(sum([int(k) for k in str(num)]))



Answer 10:

num = 123
dig = 0
sum = 0
while(num > 0):
  dig = int(num%10)
  sum = sum+dig
  num = num/10

打印(和)//确保添加这条线以上的空间



Answer 11:

你可以试试这个

def sumDigits(number):
    sum = 0
    while(number>0):
        lastdigit = number%10
        sum += lastdigit
        number = number//10

    return sum


Answer 12:

n = str(input("Enter the number\n"))

list1 = []

for each_number in n:

        list1.append(int(each_number))

print(sum(list1))


文章来源: Sum the digits of a number - python