Change your code a little bit so you can see what the values are. The problem should become obvious:
Console.WriteLine($"The maximum value for a uint is: {uint.MaxValue}");
uint number = (uint)32;
uint result = number;
for (uint i = 1; i < number; i++)
{
result = result * (number - i);
Console.WriteLine($"result: {result}\tnumber: {number}\ti: {i}");
}
Console.WriteLine(result);
If you exceed the maximum value for a type, the value "rolls over" and starts again and the lowest value for that type.