LIREN
@LIREN
Пунктумофоб

Почему при умножении 1*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17 получается совсем что-то не то?

Сделал самостоятельно факториал числа:
void factorial(const int number)
{
	printf("Факториал числа %d: ", number);

	for (int i = 1, factorialSum = 1; ; i++)
	{
		if (i > number)
		{
			cout << "\b = " << factorialSum << "\n";
			break;
		}
		cout << i << '*';
		factorialSum = factorialSum * i;
	}
}


Когда ввёл в переменную number 17, выходит:
Факториал числа 17: 1*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17 = -288522240


Как оно работает?
  • Вопрос задан
  • 224 просмотра
Решения вопроса 2
vfreelancer
@vfreelancer
php
слишком большое число. не хватает памяти для хранения в переменной.
Ответ написан
@res2001
Developer, ex-admin
Ответ в комментариях
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Попробуй long.
Ответ написан
@Agrimed
Идет переполнение, числа находятся в промежутке от -2^15 до (2^15) - 1 это в знаковой, если использовать( как пример) unsigned int, то промежуток будет от 0 до (2^16)-1. Если число переходит значение в знаковой переменной верхнюю положительную границу(2^15) - 1, то число становится отрицательным и так далее. Все еще зависит от системы на которой вы работаете. Допустим в C можно указать, сколько бит вам нужно в int.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы