Project Euler 16

果然本来很难的一道题……成了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

我还是觉得这个写汇编的每次都拿第一名的美国大哥……太屌了……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值