编写计算n!,能捕捉算术溢出异常,并能输出产生溢出时的n值。(设n为int型)
时间: 2024-03-09 20:48:17 浏览: 61
可以使用long long类型来避免算术溢出,同时使用try-catch语句捕捉溢出异常,代码如下:
```c++
#include <iostream>
#include <stdexcept>
using namespace std;
long long(int n) {
long long result = 1;
for (int i = 1; <= n; i++) {
try {
result *= i;
if (result < 0) {
throw overflow_error("Factorial overflow");
}
} catch (overflow_error& e) {
cout << e.what() << ": n = " << i << endl;
return -1;
}
}
return result;
}
int main() {
int n = 21;
long long result = factorial(n);
if (result != -1) {
cout << n << "! = " << result << endl;
}
return 0;
}
```
在上面的代码中,我们使用long long类型存储阶乘的结果,然后在每次乘法操作后判断结果是否小于0,如果小于0则说明发生了算术溢出,此时我们使用throw语句抛出一个overflow_error异常,然后在catch语句中捕获该异常并输出提示信息。最后的结果如果不为-1,则说明计算成功,输出阶乘的值。
阅读全文