Skip to content

Instantly share code, notes, and snippets.

@stephenpaulger
Last active December 20, 2015 15:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stephenpaulger/6154551 to your computer and use it in GitHub Desktop.
Save stephenpaulger/6154551 to your computer and use it in GitHub Desktop.
import timeit
import random
from math import log, ceil
def sum_digits(num):
sum_dig = 0
while num > 0:
last_digit = num % 10 # extract the last digit
sum_dig += last_digit ** 2 # sum of square of digit
num /= 10 # strip of last digit
return sum_dig
def sum_digits2(num):
return sum(int(digit) ** 2 for digit in str(num))
def sum_digits3(num):
sum_dig = 0
while num > 0:
(num, last) = (num / 10, num % 10)
sum_dig += last
return sum_dig
def sum_digits4(num):
return sum(((num // 10**e) % 10) for e in range(int(ceil(log(num, 10)))))
def test_sum(func):
func(random.randint(10**10, 10**12))
if __name__ == "__main__":
reps = 100000
print(timeit.timeit("test_sum(sum_digits)", setup="from __main__ import test_sum, sum_digits", number=reps))
print(timeit.timeit("test_sum(sum_digits2)", setup="from __main__ import test_sum, sum_digits2", number=reps))
print(timeit.timeit("test_sum(sum_digits3)", setup="from __main__ import test_sum, sum_digits3", number=reps))
print(timeit.timeit("test_sum(sum_digits4)", setup="from __main__ import test_sum, sum_digits4", number=reps))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment