Project Euler 16

本文介绍了一个用Python一行代码解决复杂数学问题的例子,并对比了几种不同的实现方式,包括使用sum和ord函数的简洁方法,以及利用reduce和lambda表达式的高级方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值