【发布时间】:2020-09-09 01:47:12
【问题描述】:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int n;
cin >> n;
int i = sqrt(1 + 2 * n * (n + 1)) - 1;
cout << i;
}
我编写了一个使用 C++ 中的sqrt() 函数的简单程序。即使sqrt() 的输入是正数,上面的程序也会在控制台上打印出 n = 32768 的负值。我尝试将语句从 int i = sqrt(1 + 2 * n * (n + 1)) - 1; 更改为 double i = sqrt(1 + 2 * n * (n + 1)) - 1; 但错误没有解决。
输出:
32768
-2147483648
以上输出为int i = sqrt(1 + 2 * n * (n + 1)) - 1;
请帮忙!
【问题讨论】:
-
尝试将
n更改为double -
1 + 2 * n * (n + 1)是int类型的表达式。好像溢出了。 -
如果调用
sqrt(或任何其他函数)的结果没有意义,请查看调用它的参数。 -
尝试手动计算
1 + 2 * 32768 * (32768 + 1),您会很快注意到它是2147549185,并且可能溢出int。