ほとんどのプログラミング言語で整数オーバーフローが処理されるため、0 を取得しています。ループ内の各計算の結果を (HEX 表現を使用して) 出力するとどうなるかを簡単に確認できます。
int n = Convert.ToInt32(Console.ReadLine());
int factorial = 1;
for (int i = 1; i <= n; i++)
{
factorial *= i;
Console.WriteLine("{0:x}", factorial);
}
Console.WriteLine(factorial);
n = 34 の場合、結果は次のようになります。
1 2 6 18 78 2d0 13b0 ... 2c000000 80000000 80000000 0
基本的に 2 で乗算すると数値が左にシフトし、十分な 2 を含む numberer を乗算すると、すべての有効桁数が 32 ビット幅の整数から外れます (つまり、最初の 6 つの数値で 4 つの 2 が得られます: 1、2、3、2*2、5、 2*3 であるため、それらを乗算した結果は 0x2d0 で、最後に 4 つのゼロ ビットがあります)。