C# 用Int代替Long,bug?

C# 用Int代替Long,bug?,c#,algorithm,int,long-integer,C#,Algorithm,Int,Long Integer,我在Codility做了一个taks,它的内容在下面的链接中。 我不明白为什么会有不同的结果: 一, 二, 它似乎将结果视为System.Int32,它是System.Int64,我已经在VS中检查过了。这是一个错误,还是我遗漏了什么?在这里: long total = ((2+A.Length)*(A.Length+1)/2); 长度是一个整数,乘法可以溢出。因此,在结果可能溢出后,将其存储到long。T[]。Length是int.T[]。longlegth是long 请尝试以下代码,其中选

我在Codility做了一个taks,它的内容在下面的链接中。 我不明白为什么会有不同的结果:

一,

二,

它似乎将结果视为System.Int32,它是System.Int64,我已经在VS中检查过了。这是一个错误,还是我遗漏了什么?

在这里:

long total = ((2+A.Length)*(A.Length+1)/2);
长度是一个整数,乘法可以溢出。因此,在结果可能溢出后,将其存储到long。

T[]。Length是int.T[]。longlegth是long

请尝试以下代码,其中选中表示算术溢出应导致异常:

long total = checked((A.Length + 2) * (A.Length + 1) / 2);
您应该得到OverflowException,因为即使A.Length不超过int的大小,乘积也会超过。将代码更改为以下内容时:

long N = A.Length + 1;
long total = N * (N + 1) / 2;
您现在使用long而不是int进行乘法,因此没有溢出

这段代码也可以正常工作,尽管我更喜欢单独定义N:


代码示例应该在问题本身中,而不是在外部链接中。
long total = checked((A.Length + 2) * (A.Length + 1) / 2);
long N = A.Length + 1;
long total = N * (N + 1) / 2;
long total = (A.LongLength + 2) * (A.LongLength + 1) / 2;