Fácil–medio · Acumulación
Factorial
Lee N e imprime N! = 1 × 2 × … × N. El mismo esqueleto de acumulador de la Suma de 1 a N — pero multiplicando, y con un techo duro que descubrirás por las malas (y por lo interesante).
En una fraseMultiplica de 1 a N en un long long: 12! = 479.001.600 es el último factorial que cabe en un int de 32 bits, y 0! vale 1, no 0.
El problema
Entrada: un entero N (0 ≤ N ≤ 12).
Salida: N!.
Ejemplos:
| Entrada | Salida |
|---|---|
5 | 120 |
0 | 1 |
¿Por qué el techo en 12? Porque 12! = 479.001.600 cabe en un int de 32 bits — y 13! no. El límite es la lección.
Tu solución
Entrada personalizada para «Ejecutar mi entrada»
La corrección corre en tu navegador contra pruebas ocultas. Un bucle infinito se corta a los 3 segundos — aun así, asegúrate de que todo bucle tenga salida. Tu código se guarda solo mientras escribes.
¿Atascado? Pistas
Pista 1 — empieza en 1, no en 0
El acumulador arranca en 1 (multiplicar por 0 lo borra todo — ese «valor neutro» se llama elemento identidad). Luego for (int i = 1; i <= n; i++) r *= i;.
Pista 2 — el borde N = 0
Por definición 0! = 1. Con el bucle de arriba, N = 0 da cero vueltas y el acumulador se queda en 1 — la respuesta correcta cae gratis. Cuando los casos borde no cuestan código extra, tu estructura es la correcta.
Solución (¡inténtalo primero!)
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int r = 1;
for (int i = 1; i <= n; i++) {
r *= i;
}
cout << r << endl;
return 0;
}
El acantilado de desbordamiento: 12! = 479.001.600 cabe en int (máx ≈ 2.100 millones); 13! envuelve silenciosamente a basura — sin error, solo números equivocados. Factoriales más grandes necesitan long long en un compilador real (hasta 20!) o técnicas de números grandes. El desbordamiento también explica por qué los tipos y sus límites importan, y no solo la sintaxis.
Análisis profundo
Por qué funciona
Un acumulador que multiplica, y el primer sitio donde la respuesta deja de caber en el tipo que elegiste. El protagonista pasa a ser la velocidad de crecimiento.
El coste
O(n) multiplicaciones. 13! = 6.227.020.800 ya supera un int con signo de 32 bits.
Dónde falla
- int desborda en 13! en silencio: obtienes un número creíble y equivocado, sin ningún error.
- Sembrar el producto con 0 en vez de 1 hace que todo salga 0.
Siguiente paso
Un crecimiento que no puedes calcular directamente: Fibonacci.
Dos cosas para recordar
- 13! desborda int; 21! desborda hasta unsigned long long.
- Los productos empiezan en 1, las sumas en 0.
🐞 Esta versión falla: ábrela y pruébala
El producto arranca en 0: todo sale 0
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
long long f = 0;
for (int i = 1; i <= n; i++) f *= i;
cout << f << endl;
return 0;
}