我试图使用Swift 2.0来解决欧拉问题#2,这是为了找到400万以下的斐波纳契序列中所有偶数的sume。当我尝试迭代到400万Xcode时抛出错误"执行被中断,原因:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0)
var num1 = 0
var num2 = 1
var sum = 0
var evenSum = 0
var max = 4000000
for i in (1...max){
print(i)
sum = num1 + num2 //ERROR HERE!
num1 = num2
num2 = sum
if((sum % 2) == 0){
print(sum)
evenSum += sum
}
}
print("\(evenSum)",terminator:"")
答案 0 :(得分:2)
因为存在整数溢出。总和太大了。当发生这种情况时,Swift 故意会使程序崩溃,这与其他获得垃圾结果的语言不同。
使用Int64作为变量类型可以进一步获得一点,但不多。
顺便说一句。再次仔细阅读欧拉问题陈述。你的程序没有计算欧拉问题#2要求的内容。