我正在通过项目Euler,我正在尝试编写最简洁的代码。我知道这是可能的,所以我怎样才能简化以下代码。最好,我希望它是一行,而不是使用int-> string-> int转换。
问题:数字2 1000 的数字总和是多少?
我的回答:
>>> i=0
>>> for item in [int(n) for n in str(2**1000)];i+=item
答案 0 :(得分:16)
sum(int(n) for n in str(2**1000))
答案 1 :(得分:3)
不是单行,但看起来更干净的生成器解决方案,也避免了int-> string-> int转换:
def asDigits(n):
while n:
n,d = divmod(n,10)
yield d
print sum(asDigits(2**1000))
给予1366。
有趣的是,2 ** 10000中的数字总和为13561,其数字加起来与1366相同。
当然,如果以二进制表示,2 ** 1000中的数字之和为1.(我甚至在脑海里做过!)
答案 2 :(得分:0)
单个int到str转换以获取长度:
int(sum(map(lambda x:2**1000/x % 10, (10**x for x in xrange(len(str(2**1000)))))))