首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中数字较高的System.DivideByZeroException

C#中数字较高的System.DivideByZeroException
EN

Stack Overflow用户
提问于 2018-07-30 22:51:37
回答 1查看 80关注 0票数 1

因此,我一直在尝试用C#编写一个程序,返回给定数字的所有因子(稍后我将实现用户输入)。该程序如下所示:

代码语言:javascript
复制
//Number to divide
long num = 600851475143;

//initializes list
List<long> list = new List<long>();

//Defines combined variable for later output
var combined = string.Join(", ", list);

for (int i = 1; i < num; i++)
{
    if (num % i == 0)
    {
        list.Add(i);
        Console.WriteLine(i);
    }
}

然而,在一段时间后,程序开始尝试除负数,这在一段时间后以System.DivideByZeroException结束。我不清楚它为什么要这样做。只有在"num“变量包含一个11位或更多的数字后,它才开始执行此操作。但由于我需要这么高的数字,修复或类似的将非常感谢。我还是个初学者。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-30 22:56:22

我强烈怀疑这个问题是整数溢出。num是64位整数,而i是32位整数。如果num大于int.MaxValue,那么当您递增i时,它将最终溢出回到负值,然后最终为0……这时num % i将抛出。

最简单的选择是将i改为long

代码语言:javascript
复制
for (long i = 1; i < num; i++)

不幸的是,您的原始代码中没有任何警告- i在需要的地方被提升为long,因为存在从intlong的隐式转换。我不清楚需要做什么改变才能在语言本身中发现这一点。对于Roslyn分析器来说,注意到这类问题会更简单。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51596726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档