0
一個巨大的數字分配給一個變量跳出while循環的我想寫一個程序,可以找到N個號碼,只包含因子2,3或5不能在斯卡拉
def method3(n:Int):Int = {
var q2 = mutable.Queue[Int](2)
var q3 = mutable.Queue[Int](3)
var q5 = mutable.Queue[Int](5)
var count = 1
var x:Int = 0
while(count != n){
val minVal = Seq(q2,q3,q5).map(_.head).min
if(minVal == q2.head){
x = q2.dequeue()
q2.enqueue(2*x)
q3.enqueue(3*x)
q5.enqueue(5*x)
}else if(minVal == q3.head){
x = q3.dequeue()
q3.enqueue(3*x)
q5.enqueue(5*x)
}else{
x = q5.dequeue()
q5.enqueue(5*x)
}
count+=1
}
return x
}
println(method3(1000))
println(method3(10000))
println(method3(100000))
結果
51200000
0
0
當輸入數字變大,我從功能得到0。 但是,如果我改變功能
def method3(n:Int):Int = {
...
q5.enqueue(5*x)
}
if(x > 1000000000) println(('-',x)) //note here!!!
count+=1
}
return x
}
結果
51200000
(-,1006632960)
(-,1007769600)
(-,1012500000)
(-,1019215872)
(-,1020366720)
(-,1024000000)
(-,1025156250)
(-,1033121304)
(-,1036800000)
(-,1048576000)
(-,1049760000)
(-,1054687500)
(-,1061683200)
(-,1062882000)
(-,1073741824)
0
.....
所以我不知道爲什麼結果等於0時,輸入的號碼變大。
在函數中使用'BigInt'(http://www.scala-lang.org/api/2.12.0/scala/math/BigInt.html)而不是'Int'。這應該解決問題。 – tobi
Thanks.It適用於'BigInt'。但實際上,號碼列表應該是2,3,4,5,6,8,9,10,12,15 .....並且不包含14,這是2 * 7。 –