果然本来很难的一道题……成了one-liner race……
看到这个题的第一眼……我就心中对python提起了万分崇敬……
于是一行代码出来了……
sum(ord(i)-48 for i in list(str(2**10000)))
看了一下forum,大家各种奇葩……
这个python的似乎也挺好
reduce(lambda x, y: x + y, [int(i) for i in str(2 ** 1000)])
其实这个我真心看得不算太懂,更加写不出来……待会去查docs……
sum(int(digit) for digit in str(2**1000))
看到这个int……我就觉得自己还是停固在pascal和C……
POWER EQU 1000
_DATA SEGMENT
Number DWORD (POWER+31)/32 DUP (0)
_DATA ENDS
; set up number in binary
lea ebp, [Number]
mov eax, POWER
bts [ebp], eax
; convert to decimal to sum digits
mov edi, LENGTHOF Number - 1
mov ecx, 10
xor ebx, ebx ; sum
_0: mov esi, edi ; dwords to convert
xor edx, edx
@@: mov eax, [ebp][esi*4]
div ecx
mov [ebp][esi*4], eax
dec esi
jns @B
add ebx, edx
cmp DWORD PTR [ebp][edi*4], 0
jne _0
dec edi
jns _0
我还是觉得这个写汇编的每次都拿第一名的美国大哥……太屌了……