Everything looks good and nice but what's if you want to calculate " 1000! " or the factorial of greater values ?
The " unsigned int " type can memorize a value between 0 and +4,294,967,295 but " 1000! " is more much greater than the dimension of " long double " which is the greatest data type in C/C++. I think this is a good question.
I'm waiting suggestions and ideas.