C++问题中的sqrt函数

Kak*_*t_7 0 c++ sqrt

#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;

请帮忙!

Mar*_*rry 6

更改int ndouble n。您的计算1 + 2 * n * (n + 1)溢出了int32 位的范围是 -2,147,483,648 到 2,147,483,647。

旁注:int可能不是 32 位,这取决于平台(但是,通常大部分时间是 32 位)