Sum digits of an integer: Difference between revisions

Content added Content deleted
(→‎{{header|Vlang}}: Rename "Vlang" in "V (Vlang)")
(Python 3, simplify)
Line 3,375: Line 3,375:
or
or


<syntaxhighlight lang="python">def toBaseX(num, base):
<syntaxhighlight lang="python">def sumDigits(num, base=10):
output = []
while num:
num, rem = divmod(num, base)
output.append(rem)
return output

def sumDigits(num, base=10):
if base < 2:
if base < 2:
print "Error: Base must be at least 2"
print("Error: base must be at least 2")
return
return
return sum(toBaseX(num, base))
num, sum = abs(num), 0
while num >= base:
num, rem = divmod(num, base)
sum += rem
return sum + num


print sumDigits(1)
print(sumDigits(1))
print sumDigits(12345)
print(sumDigits(12345))
print sumDigits(123045)
print(sumDigits(-123045))
print sumDigits(0xfe, 16)
print(sumDigits(0xfe, 16))
print sumDigits(0xf0e, 16)</syntaxhighlight>
print(sumDigits(0xf0e, 16))</syntaxhighlight>
{{out}}
{{out}}
<pre>
<pre>
Line 3,402: Line 3,399:
</pre>
</pre>
The following does no error checking and requires non-base 10 numbers passed as string arguments:
The following does no error checking and requires non-base 10 numbers passed as string arguments:
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">def sumDigits(num, base=10):
return sum(int(x, base) for x in str(num))
def sumDigits(num, base=10):
return sum([int(x, base) for x in list(str(num))])


print sumDigits(1)
print(sumDigits(1))
print sumDigits(12345)
print(sumDigits(12345))
print sumDigits(123045)
print(sumDigits(123045))
print sumDigits('fe', 16)
print(sumDigits('fe', 16))
print sumDigits("f0e", 16)</syntaxhighlight>
print(sumDigits("f0e", 16))</syntaxhighlight>
Each digit is base converted as it's summed.
Each digit is base converted as it's summed.