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。 –