使用Mod时避免使用大数字溢出

问题描述 投票:0回答:2

我开始玩弄项目euler。

我已经完成了问题#3,但我只能通过将我的endNumber设置为71 * 486847(手动计算)来完成它。尝试设置endNumber = 600851475143时,我收到溢出错误。

我甚至将endNumber设置为Long,甚至Double,我认为应该有足够的数字来计算。

我不能在这里发布整个代码,所以我会发布一半,希望有人可以告诉我如何编辑它以处理更大的数字。

另外我注意到当我的代码有一个如下所示的非常大的数字时会弹出“#”。

endNumber = 600851475143#
        countFactor = 0

        For i = 2 To endNumber
            If endNumber Mod i = 0 Then 
excel vba excel-vba
2个回答
1
投票

溢出不是由于将数字600851475143分配给Double变量,因为Mod函数似乎不能很好地处理比Long更长的数字(事实上看似根本没有)。

另一种方法是使用Mod的手动计算:

endNumber = 600851475143#
        countFactor = 0

        For i = 2 To endNumber
            If endNumber - (Int(endNumber / i) * i) = 0 Then

如果你打算定期使用Mod大数字,那么Chip Pearson's function将是一个有用的(这是我首先了解这个主题的地方)。它是在Excel发布的一个问题,但在Access完美运作。


0
投票

长期合作的最高数量是:2.147.483.647 Double用于十进制目的,因此不是您想要的。

弹出的#是因为要在该单元格内显示的数字很大。

另外我不知道你想用这个循环做什么。但是那个需要很长时间才能运行。

在这个链接上你可以找到关于处理大数字:Large Number Arithmetic

希望有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.