C#faculty:奇怪的结果

时间:2015-09-23 11:40:15

标签: c#

我试着编写一个简单的代码来输出教师的结果。 (假设用户输入了正数) 所以例如:输入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();
    }

2 个答案:

答案 0 :(得分:5)

您收到了Integer Overflow

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

答案 1 :(得分:4)

你的计算越来越多了。由于int是32位有符号数,因此当您尝试存储大于该值的值时,它将溢出。

您可以尝试查看可用于存储大值的BigInteger Structure

例如

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

将输出

1241018070217667823424840524103103992616605577501693185388951803611996075221691752992751978120487585576464959501670387052809889858690710767331242032218484364310473577889968548278290754541561964852153468318044293239598173696899657235903947616152278558180061176365108428800000000000000000000000000000000000000000