首页 > 解决方案 > 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;
}

我编写了一个使用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;

请帮忙!

标签: c++sqrt

解决方案


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

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


推荐阅读