Yandex-SHRI-factorials

by certainlyakey

HTML

<div id="output"></div>

JavaScript

function factorial (m) {
	if (m == 0 || m == 1) {
		return 1;
	}
	else {
		return (m * factorial (m - 1));
	};
}

function Sum_fact_digits(num) {
	var str = num.toString();
	var arr = str.split('');
	var tSum = 0;
	for (var i=0; i < arr.length; i++)  {
		tSum += factorial(parseInt(arr[i]));
	}
	return tSum;
}

function findLimit() {
	//sum - сравниваемая сумма факториалов цифр
	//нижняя граница - 10^(n-1), где n - количество цифр (sum не может быть меньше исходного числа)
	//верхняя граница - если максимальный для данного количества цифр sum оказывается меньше определенной для этого количества нижней границы; далее вычисляем сумму факториалов для максимального числа на нижней границе количества цифр
	var maxDigit = 9;
	var n = 1;
	while (Math.pow(10,(n-1)) < factorial(maxDigit)*n) {
		n++;
	}
	var maxFactSumLimit = factorial(maxDigit) * (n-1);
	return maxFactSumLimit;
}

function findMagicNumbers() {
	var maybe = 0;
	var max = findLimit();
	var MagicNumbersArr = [];
	for (var c=0; c <= max; c++)  {
		maybe = Sum_fact_digits(c);
		if (maybe === c) {MagicNumbersArr.push(maybe);}
	}
	return MagicNumbersArr;
}

var magicDigits = findMagicNumbers();
document.getElementById('output').innerHTML = magicDigits.join(', ');