我相信这个问题已经被问了很多,但我已经检查过其他论坛,并试图解决这个问题,这似乎没有帮助。我认为有一个溢出问题,但我不记得如何解决它。我花了很长时间从编码中解脱出来(我的错在那里),所以我正在尝试一些问题来帮助我摆脱困境。所以,只是想知道哪里出了问题。当我尝试n = 1000
的答案是错误的,但数字小于这似乎是正确的。由于大数字不会工作,我认为这是一个整数溢出。整数溢出3和5的倍数
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()
你不能在Python溢出'int's,它们是任意精度的(模仿Python 2中的'long'实现细节,以及像range这样的疯狂内建函数实际上会抛出'OverflowError',因为它们只能执行C'double')。 – Julian 2012-07-27 20:52:45
溢出没有问题,使用mod('%')运算符来确定给定的数字是否可被其他整数所整除。例如。 'n%3 == 0'表示'n'能被3等整除 – Levon 2012-07-27 20:53:02
这可以简单得多:'sum((x for x in range(1000)if x%3 == 0 or x%5 == 0))' – mgilson 2012-07-27 20:53:42