Факториальный калькулятор представляет отрицательное число, которое должно быть положительным.Как исправить? - PullRequest
0 голосов
/ 04 февраля 2019

Мне нужно закодировать факториальный калькулятор, который достигает 1001 *, я получаю 19, и это нормально, но когда я пытаюсь вычислить 20!, он возвращает отрицательное число.
Как я могу исправитьэтот?

Теперь, немного предыстории (в случае, если то, что у меня есть, совершенно неверно), я не брал класс VB.Net (где они изучали факториалы), поэтому у меня нет законного НИЧЕГО, что я делаю здесь.

public partial class Form1 : Form
{
    private void btnCalculate_Click(object sender, EventArgs e)
    {
        int f = 1, n, i;
        n = Int32.Parse(txtNumber.Text);
        for (i = 1; i <= n; i++)
        {
            f = f * i;
            txtFactorial.Text = f.ToString();
        }
    }
}

Ожидаемый: 20! = 2,432,902,008,176,640,000
Фактический: 20! = -2102132736

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Тип int слишком мал, когда вы имеете дело с такими большими числами.

С типом int вы можете представить максимальное значение 2 147 483 647, но вы хотите сохранитьболее чем в 1B большее число (поэтому оно переполняется, и вы получаете неправильное отрицательное число - чтение целочисленного переполнения ).

Вам потребуется тип long для этого расчета.Этого достаточно для 20 !, но если вы работаете с еще большими числами, тогда используйте BigInteger.

Я получаю 19, и это нормально

Вам следует проверить это значение еще раз.Возвращение положительного числа не означает, что это правильно.Я почти уверен, что с int вы получите неправильное значение в 19!тоже.

0 голосов
/ 04 февраля 2019

Для больших чисел вы можете использовать BigInteger struct.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...