#include<iostream>
#include <iomanip>
#include <stdexcept>
#include <limits>
using namespace std;
int main() {
	cout << "n! \n";
	cout << "To exit => n<0 \n\n";
	while (true) {
		try {
			int n;
			cout << "n = ";
			cin >> n;
			if (cin.fail()){
				throw invalid_argument("Error! You have to enter a natural number!");
			}
			cin.clear(); 
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
			if (n<0) {
				cout << "The program is terminated. Bye!";
				break;
			} else {
				double f = 1;
				for (int i=2; i<n+1; i++) {
					f *= i;
				}
				cout << n << "! = " << fixed << setprecision(0) << f << endl << endl;
			}	
		} catch (const invalid_argument& e){
			cin.clear(); 
        	cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
			cout << e.what() << endl << endl;
		}
	} 
	return 0;
}
