Как найти все цифры числа 100!

10 апреля 2009

Как найти все цифры числа 100!

Вы никогда не задавали себе этот вопрос? Это очень интересный вопрос, ведь используя, стандартный калькулятор Windows вы получите укороченную версию этого числа. Даже написав функцию вычисления факториала просто нельзя поместить ни в одну числовую переменную все цифры факториала 100, т.к. оно состоит из 158 цифр. О каких цифрах идет речь и как их получить, мы поговорим в этой статей.

Начнем с того, нам нужно написать собственную функцию умножения, так как мы умножаем на простом листке бумаги. Она будет умножать числа вида [999] * [9], т.е. числа, которые содержать одну или несколько цифр на числа, содержащие одну цифру.

string mnog(string s, int i) {
	string res = "";
	int x = 0, d, cifra = 0;
	for (int j = s.Length - 1; j >= 0; j--)	{
		cifra = Convert.ToInt32(s.Substring(j, 1)) * i + x;
		if (j != 0) {
			d = cifra % 10;
			x = cifra / 10;
		}
		else
			d = cifra;

		res = Convert.ToString(d) + res;
	}
	return res;
}

Входные параметры s и i – это числа, которые необходимо перемножить, соответствует выражению s * i. Алгоритм работы данной функции заключается в следующем:

  1. Извлекаем j-ю цифру из строки s (в начале это последняя цифра), умножаем ее на i и прибавляем значение полученное в пункте №3;
  2. Получаем остаток от деления вычисленного значения на число 10;
  3. Получаем результат от целочисленного деления вычисленного значения на 10;
  4. Добавляем вычисленное значение из пункта №2 к результату;
  5. Повторяем пункты №1 - №4 пока не дойдем до первой цифры из строки s. Переходим к пункту №6;
  6. Повторяем пункты №1 и №4, завершаем выполнение операции умножения.

Далее необходимо написать функцию для вычисления суммы двух чисел. Она также будет складывать числа, как делаем это мы.

string summ(string s_str1, string s_str2) {
	string summa = "";
	int d = 0, cifra = 0, x = 0, sch;

	for (int i = 0; i < = s_str1.Length - 1; i++) {
		if (i == s_str1.Length - 1) {
			if (s_str1.Length == s_str2.Length)
				sch = 1;
			else
				sch = s_str2.Length - i;

			d = Convert.ToInt32(s_str1.Substring(0, 1)) + Convert.ToInt32(s_str2.Substring(0, sch)) + x;
			summa = Convert.ToString(d) + summa;
			continue;
		}
		d = Convert.ToInt32(s_str1.Substring(s_str1.Length - i - 1, 1)) + Convert.ToInt32(s_str2.Substring(s_str2.Length - i - 1, 1)) + x;
		cifra = d % 10;
		x = d / 10;
		summa = Convert.ToString(cifra) + summa;
	}
	return summa;
}

Входные параметры s_str1 и s_str2 – числа, которые нужно сложить. Алгоритм работы:

  1. Вычисляем сумму i-й цифры из строки s_str1 (в начале это последняя цифра) и i-й цифры из строки s_str2, и прибавляем значение из пункта №3;
  2. Получаем остаток от деления значения из пункта №1 на число 10;
  3. Получаем результат от целочисленного деления значения из пункта №1 на 10;
  4. Добавляем вычисленное значение из пункта №2 к результату;
  5. Повторяем пункты №1 - №4 пока не дойдем до 1-й цифры из строки s_str1. Переходим к пункту №6;
  6. Если количество цифр первого числа и второго совпадают, выполняем пункт №1, прибавляем его к результату. В противном случае суммируем первую цифру из строки s_str1 и значение из пункта №3, и прибавляем его к результату. Завершаем работу функции вычисления суммы.

Ну и наконец, мы дошли до процедуры, вызываемой событием клика на кнопку “sol”.

private void sol_Click(object sender, EventArgs e) {
	string s = "99", s_str1 = "", s_str2 = "", res = "";
	for (int i = 98; i >= 2; i--) {
		if (i < 10)	{
			s = mnog(s, i);
			continue;
		}

		if (i % 10 != 0) {
			s_str1 = mnog(s, i % 10);
			s_str2 = mnog(s, i / 10);
			res = summ(s_str1, s_str2 + "0");
		}

		if (i % 10 == 0) {
			s_str2 = mnog(s, i / 10) + "0";
			res = s_str2;
		}
		s = res;
	}
	chisla.Text = s + "00";
}

Здесь выполняется перемножение и суммирование чисел, начинающихся с 99 до 2, число 100 нет необходимости умножать, в конце всех вычислений просто прибавим “00”. В этой процедуре есть необходимые условия для нормальной работы функций вычисления умножения и суммы двух чисел. В поле “chisla” запишется результат выполнения программы, т.е. все цифры числа 100! как это показано рисунке:

Все цифры факториала 100

Все цифры факториала 100

Теперь сами можете получить все цифры факториала 100 в своей программе, со всеми операциями я вас ознакомил.

Автор: Евтеев Евгений Александрович

  • Реклама сайта
    Обучение JavaScript для подростков Владивосток. Топ курсы JavaScript vlprog.ru.
  • Категории