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();
}
你得到一个整数溢出
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