我相信这个问题已经被问了很多,但我已经查过其他论坛,并试图解决这个问题,这似乎没有帮助。我在想有一个溢出问题,但我不记得该怎么解决它了。我花了很长一段时间来编写代码(我的错在这里),所以我正在尝试一些问题来帮助我重新回到正常的状态。所以,只是想知道到底出了什么问题。当我尝试n = 1000
时,答案是错误的,但是小于这个数字的数字似乎是正确的。因为大数字行不通,我认为这是一个整数溢出。在
def n_number():
n = raw_input("Enter a max number: ")
try:
int(n)
return n
except ValueError:
print 'Value is not an integer'
exit(1)
# 'function that will add multiples of 3 and 5 that are less than the given value, n.'
def sum_multiplies(n):
sum = long(0)
counter3, counter5 = int(1),int(1)
value3 = 3*counter3
value5 = 5*counter5
while True:
# 'sums of multiples of 5\'s less than n'
if value5<int(n):
sum+= value5
counter5+=1
value5 = 5*counter5
# 'sums of multiples of 3\'s less than n'
if value3<int(n):
sum+= value3
counter3+=1
value3 = 3*counter3
else:
break
print "sum: %s" %sum
print "counter3: %s" %counter3
print "counter5: %s" %counter5
def main():
'max number is in n'
n = n_number()
sum_multiplies(n)
if __name__ == "__main__":
main()
看起来你在重复计算15的倍数。在
您当前正在
O(n)
时间内执行此操作-您可以在恒定时间内完成!在你得原谅我对python知识的缺乏,我是一个java人。可能有一些偶然的语法错误。但这里的想法是,以}是一样的,我们可以用“单位和”(
n = 40
为例,您将3 5 6 9 10 12 15 18 20 21 24 25 27 30 33 35 36 39 40
相加。这和3 6 9 12 15 18 21 24 27 30 33 36 39 UNION 5 10 15 20 25 30 35 40
是一样的,现在认识到3 6 9 12 ...
和{1 2 3 4
)到项的数目,即n / mult
,然后用这个和乘以mult,就像我们对3 * (1 2 3 4)
所做的一样。好消息是单位和可以在恒定时间内计算出来,因为n * (n + 1)
唯一的问题是15的倍数会出现两次(同时在5s和3s中计算),所以我们也必须将它们减去。在问题是你把3和5(比如15)的倍数数两次。在
解决这个问题的一种方法是添加:
跳过重复计算。在
相关问题 更多 >
编程相关推荐