#include <iostream>
#include <climits>
using namespace std;
int inputNum(void) //输入一个合法的数
{
int input;
bool valid;
do {
cout << "请输入待计算阶乘的数:";
valid = cin >> input;
valid = valid && input >= 1;
if (!valid)
{
cout << "您的输入有误!" << endl;
cin.clear();
cin.ignore(100, '\n');
}
} while (!valid);
return input;
}
unsigned long fact(int num)
{
unsigned long sum = 1, max = ULONG_MAX;
for (int i = 1; i <= num; i++)
{
sum *= i;
max /= i;
}
if (max < 1)
{
throw "溢出!"; //抛出异常信息
}
return sum;
}
int main(void)
{
int num;
num = inputNum();
unsigned long result;
try
{
result = fact(num);
cout << result << endl;
}
catch (const char *err) //处理异常
{
cout << err << endl;
}
return 0;
}