2.1 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	id, title, challengeType, forumTopicId, dashedName
| id | title | challengeType | forumTopicId | dashedName | 
|---|---|---|---|---|
| 5a23c84252665b21eecc7ee0 | Fatoriais restantes | 5 | 302302 | left-factorials | 
--description--
Fatoriais restantes, !n, podem se referir a subfatoriais ou a somas de fatorial. A mesma notação pode ser vista de modo confuso para as duas definições diferentes. Às vezes, subfatoriais (também conhecidos como desarranjos) podem usar qualquer uma das notações a seguir:
- $!n$
- $!n$
- $n¡$
(Pode não ser visualmente óbvio, mas o último exemplo utiliza um ponto de exclamação ascendente.) Esta tarefa usará essa fórmula para o fatorial restante:
!n = \\sum\_{k=0}^{n-1} k!
onde !0 = 0
--instructions--
Escreva uma função que calcule o fatorial restante de um certo número.
--hints--
leftFactorial deve ser uma função.
assert(typeof leftFactorial == 'function');
leftFactorial(0) deve retornar um número.
assert(typeof leftFactorial(0) == 'number');
leftFactorial(0) deve retornar 0.
assert.equal(leftFactorial(0), 0);
leftFactorial(1) deve retornar 1.
assert.equal(leftFactorial(1), 1);
leftFactorial(2) deve retornar 2.
assert.equal(leftFactorial(2), 2);
leftFactorial(3) deve retornar 4.
assert.equal(leftFactorial(3), 4);
leftFactorial(10) deve retornar 409114.
assert.equal(leftFactorial(10), 409114);
leftFactorial(17) deve retornar 22324392524314.
assert.equal(leftFactorial(17), 22324392524314);
leftFactorial(19) deve retornar 6780385526348314.
assert.equal(leftFactorial(19), 6780385526348314);
--seed--
--seed-contents--
function leftFactorial(n) {
}
--solutions--
function leftFactorial(n) {
  if (n == 0) return 0;
  if (n == 1) return 1;
  // Note: for n>=20, the result may not be correct.
  // This is because JavaScript uses 53 bit integers and
  // for n>=20 result becomes too large.
  let res = 2,
    fact = 2;
  for (var i = 2; i < n; i++) {
    res += fact;
    fact *= i + 1;
  }
  return res;
}