无法在 Scala 的 while 循环中为变量分配一个大数字
Can't assign a big number to a variable out of the while loop in scala
我想写一个程序,可以找到第 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。
一个Int
只有32位(4字节)。您正在达到 Int
的极限。
取您遇到的最后一个数字:1073741824。将其乘以 2,结果为负数 (-2147483648)。将它乘以 4,结果为零。
顺便说一句,如果您使用的是数字 "which only contains factor 2, 3 or 5",换句话说,数字 2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 15, ...
等,那么该序列中的第 1,000 个数字应该不会那么大。根据我的计算,结果应该只是 1365
.
我想写一个程序,可以找到第 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。
一个Int
只有32位(4字节)。您正在达到 Int
的极限。
取您遇到的最后一个数字:1073741824。将其乘以 2,结果为负数 (-2147483648)。将它乘以 4,结果为零。
顺便说一句,如果您使用的是数字 "which only contains factor 2, 3 or 5",换句话说,数字 2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 15, ...
等,那么该序列中的第 1,000 个数字应该不会那么大。根据我的计算,结果应该只是 1365
.