项目Euler#13 Python。结转不正确

时间:2016-09-19 12:45:52

标签: python

此问题要求总计100个数字,每个数字长50个。 http://code.jasonbhill.com/python/project-euler-problem-13/

我们可以在Notepad ++中使用“\ n +”替换\n

a=37107287533902102798797998220837590246510135740250
+46376937677490009712648124896970078050417018260538
...
+20849603980134001723930671666823555245252804609722
+53503534226472524250874054075591789781264330331690
print(a)

>>37107287533902102798797998220837590246510135740250(不正确)

我们也可以用\n

替换\na+=
a=37107287533902102798797998220837590246510135740250
a+=46376937677490009712648124896970078050417018260538
...
a+=20849603980134001723930671666823555245252804609722
a+=53503534226472524250874054075591789781264330331690
print(a)

>>553...(正确)

这似乎是BigInteger算术的一个特征。在哪些条件下,所有数字的总和(方法1)会产生与迭代增量不同的结果(方法2)?

2 个答案:

答案 0 :(得分:1)

正如您在结果中看到的那样,第一组指令不是计算总和。它保留了第一个任务。由于+N本身就是一个有效的指令,因此赋值后的下一行什么都不做。因此

a=42
+1
print a

打印42

要在两行上写一条指令,您需要转义结束换行符\n

a=42\
+1

43

答案 1 :(得分:0)

Python源代码行由换行符终止。第一个示例中的后续行是单独的表达式语句,由前面带有一元加运算符的单个整数组成,但它们不执行任何操作。它们计算表达式(导致整数常量本身),然后忽略结果。如果您将所有数字放在一行上,或者在加法项周围使用括号,那么简单的总和也会起作用。