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

时间:2014-09-30 03:58:18

标签: excel vba excel-vba

我开始玩弄项目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 

2 个答案:

答案 0 :(得分: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中效果很好。

答案 1 :(得分:0)

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

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

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

在此链接上,您可以找到有关处理大数字的信息:Large Number Arithmetic

希望有所帮助