来源:我的博客站 OceanicKang |《C++ 异常处理》
#include <iostream>
#include <climits>
#include <string>
#include <sstream>
class Factorial
{
public:
Factorial(unsigned long num) {
this -> num = num;
}
unsigned long getFactorial() {
unsigned long sum = 1;
unsigned long max = ULONG_MAX;
for (int i = 1; i <= num; i++) {
sum *= i;
max /= i;
}
if (max < 1) {
std::stringstream ss;
ss << this -> num << "的阶乘超过 unsigned long 的范围";
throw ss.str();
} else {
return sum;
}
}
private:
unsigned long num;
};
int main()
{
int a;
std::cin >> a;
Factorial *f = new Factorial(a);
try {
unsigned long sum = f -> getFactorial();
std::cout << a << "的阶乘为:" << sum << std::endl;
} catch (std::string e) {
std::cout << e << std::endl;
}
delete f;
return 0;
}