#include <iostream>
#include <cmath>
using namespace std;
int main(){
int n;
cin >> n;
int i = sqrt(1 + 2 * n * (n + 1)) - 1;
cout << i;
}
Run Code Online (Sandbox Code Playgroud)
我编写了一个简单的程序,它利用了sqrt()C++ 中的函数。即使输入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;
请帮忙!
更改int n为double n。您的计算1 + 2 * n * (n + 1)溢出了int32 位的范围是 -2,147,483,648 到 2,147,483,647。
旁注:int可能不是 32 位,这取决于平台(但是,通常大部分时间是 32 位)