developer tip

숫자의 자릿수 합산-파이썬

optionbox 2020. 12. 1. 07:54
반응형

숫자의 자릿수 합산-파이썬


숫자의 자릿수 합계를 찾으려면 다음과 같습니다.

  • 입력: 932
  • 출력 : 14,(9 + 3 + 2)

이를 수행하는 가장 빠른 방법은 무엇입니까?

나는 본능적으로했다.

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

온라인에서 찾았습니다.

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

속도를 위해 사용하는 것이 가장 좋으며 더 빠른 다른 방법이 있습니까?


순수하게 정수로 할 수 있으며 가장 효율적입니다.

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

한 자리 숫자 (내가 좋아하는 숫자의 특성 중 하나는 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

이것은 도움이 될 수 있습니다

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

몇 가지 Codecademy 과제를 수행하면서 다음과 같이 해결했습니다.

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

다음을 사용할 수도 있습니다.

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

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.


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()

you can also try this with built_in_function called 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) 

you can take any number of digit


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)]))


reduce(op.add,map(int,list(str(number))))

Test:

from datetime import datetime
number=49263985629356279356927356923569976549123548126856926293658923658923658923658972365297865987236523786598236592386592386589236592365293865923876592385623987659238756239875692387659238756239875692856239856238563286598237592875498259826592356923659283756982375692835692385653418923564912354687123548712354827354827354823548723548235482735482354827354823548235482354823548235482735482735482735482354823548235489235648293548235492185348235481235482354823548235482354823548235482354823548234



startTime = datetime.now()

for _ in  range(0,100000) :
    out=reduce(op.add,map(int,list(str(number))))

now=datetime.now()
runningTime=(now - startTime)

print ("Running time:%s" % runningTime)
print(out)

Running time:0:00:13.122560 2462


Try this

print(sum(list(map(int,input()))))

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


You can try this

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

    return sum

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

list1 = []

for each_number in n:

        list1.append(int(each_number))

print(sum(list1))

참고URL : https://stackoverflow.com/questions/14939953/sum-the-digits-of-a-number-python

반응형