c#教员:奇怪的结果

本文关键字:结果 教员 | 更新日期: 2023-09-27 18:14:03

我试着写一个简单的代码来输出一个教师的结果。(假设用户输入的是正数)例如:输入5。所以5 != 5*4*3*2*1 = 120如果我输入一个小的数字,结果是正确的,但是当我输入例如24,我得到一个负数!?? ?!谁能解决这个问题?

static void Main(string[] args)
    {
        //input
        Console.WriteLine("you want to calculate the faculty from which number ?");
        string inputString;
        inputString = Console.ReadLine();
        int inputInt;
        inputInt = Convert.ToInt32(inputString);
        int i;
        int result;
        result = 1;
        //
        for (i = inputInt ; i >= 1; i--)
        {
            result = result * i;
        }
        Console.WriteLine(inputInt + "! = " + result);
        //
        Console.ReadLine();
    }

c#教员:奇怪的结果

你得到一个整数溢出

int是一个32位有符号整数,这意味着它可以包含-2^31和2^31 - 1之间的任何值。这意味着它可以存储的最大值大约是20亿,也就是10位数字。24 !24位数字

计算溢出。因为int是32位有符号数,所以当你试图存储一个大于32位的值时,它将被溢出。

你可以试着看看BigInteger结构,它可以用来存储大的值。

例如

var x = new BigInteger(1);
var fact = 171;
for (var i = 1; i <= fact; i++)
{
    x*= i;
}

将输出为

1241018070217667823424840524103103992616605577501693185388951803611996075221691752992751978120487585576464959501670387052809889858690710767331242032218484364310473577889968548278290754541561964852153468318044293239598173696899657235903947616152278558180061176365108428800000000000000000000000000000000000000000