首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >总结数字!

总结数字!
EN

Stack Overflow用户
提问于 2011-02-03 19:17:53
回答 5查看 1.9K关注 0票数 6

嗨,我一直在试用这个problem

假设P(n)是2^n的数字之和

例如:

若2^15 = 32768,其数字之和为3+2+7+6+8= 26,则P(15)=26。

n=1的P(n)的加成和为10000。

我的python code给出了67783431的答案,但法官似乎并不同意这一点:

代码语言:javascript
复制
def P(n):
    n = int(1<<n)
    S = 0
    while n != 0:
        S += (n%10)
        n /= 10
    return S

Sum = 0
for i in range(1,10001):
    Sum += P(i)
else:
    print(Sum)

有人能告诉我我的方法出了什么问题吗?如果有人为我指出同样的数学解,我将不胜感激。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-03 19:41:47

如果你展示了这些评论,你就会发现网站所有者或问题维护人员是个白痴。

他的意思是说从"0到10000",而不是"1到10000",但显然这个问题不能编辑,或者维护人员不想这样做。

和是1,因为1<<0是1,这增加了1的和。

试着提交67783432。

Note:我意识到把网站所有者或维护者称为白痴听起来可能很苛刻,但是当在网站上发布关于“数学”的内容时,准确性是很重要的。有这样一个网站,没有能力,或要求,解决错误的问题,似乎有点愚蠢。

票数 9
EN

Stack Overflow用户

发布于 2011-02-03 19:56:39

在函数式编程方面,一个更优雅的解决方案可能是:

代码语言:javascript
复制
>>> P = lambda n: sum(map(int, str(1 << n)))
>>> sum(P(i) for i in xrange(10001))
67783432

(注意,这将计算i=0到10000的P(i)之和。)

票数 3
EN

Stack Overflow用户

发布于 2011-02-03 19:31:27

您的解决方案需要相当长的时间才能运行(至少超过一分钟)。法官对解决方案运行所需时间是否规定了时间限制?

另外,如果您使用Python3,那么除法运算符(/=)总是会产生一个浮点结果。在Python 2中,结果将被截断为具有整数输入的整数。

实际上,对于Python 3,我得到了一个溢出错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "<stdin>", line 6, in P
OverflowError: int/int too large for a float
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4890610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档