一个数组越界有关问题,没看懂

一个数组越界问题,没看懂long nfact 1long ncom Int64.Parse(2000)long ncur 1for (ncur 1

一个数组越界问题,没看懂
long nfact = 1;
            long ncom = Int64.Parse("2000");
            long ncur = 1;
            for (ncur = 1; ncur <= ncom; ncur++)
            {
                checked
                {
                    Console.WriteLine(ncur);
                    nfact *= ncur;
                }
            }
            Console.WriteLine("{0}! is {1}",ncom,nfact);

为什么运行到21,算数计算过程越界
[解决办法]
首先哪有数组越界,明显是数值溢出,超过long,Maxvalue。 你这是求阶乘。