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:

EntradaSalida
5120
01

¿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

main.cpp — 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;
}