-3

我正在研究欧拉的问题二。我想用这种方式解决它,比较之后的时间。

//求斐波那契数列中所有不超过四百万的偶数项之和

我应该得到 //A: 4613732

但我得到了一个巨大的数字:

177112424089630957537

有人可以解释为什么吗?

    def Fibonaccu(max: Int) : BigInt = {
            var a:BigInt = 0
            var b:BigInt = 1
            var sum:BigInt= 0
            var i:BigInt = 0;

            while(i < max){
                i+=1
                b = a + b 
                a = b - a   
                if (b % 2 == 0) sum += b 

            }

        //Return 
    println(sum)
    sum

    }

}
4

1 回答 1

7

这里是:

scala> val fib: Stream[Int] = 0 #:: fib.scanLeft(1)(_+_)
fib: Stream[Int] = Stream(0, ?)

scala> fib.takeWhile(4000000>).filter(_%2 == 0).sum
res0: Int = 4613732

这是基于您的代码:

scala> def Fibonaccu(max: Int) : BigInt = {
     |             var a:BigInt = 0
     |             var b:BigInt = 1
     |             var sum:BigInt= 0
     |             while(b < max) {
     |                 if(b % 2 == 0) sum += b
     |                 b = a + b
     |                 a = b - a
     |             }
     |             sum
     | }
Fibonaccu: (max: Int)BigInt

scala> Fibonaccu(4000000)
res1: BigInt = 4613732
于 2013-11-12T02:48:59.773 回答