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