I now see your screenshot;
The fix is to add a working-precision option:
Plot[Mod[x!, 2^x], {x, 0, 30}, PlotPoints -> 100, WorkingPrecision -> 30]
The reason is quite easy: DiscretePlot uses integer arithmetic and will automatically switch to a type of number that can have many many digits. While for Plot it uses MachinePrecision (Real) numbers by default, and because you are working with very big numbers this gets problematic. Therefore by providing a WorkingPrecision that is high it will switch to 'arbitrary precision' numbers which can handle the huge numbers you are using.