c++ - 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;
请帮忙!
解决方案
更改int n
为double n
。您的计算1 + 2 * n * (n + 1)
溢出了int
32 位的范围是 -2,147,483,648 到 2,147,483,647。
旁注:int
可能不是 32 位,这取决于平台(但是,通常大部分时间是 32 位)
推荐阅读
- python - 使用带有地理定位的请求问题使用 python 进行 Webscraping
- python - Django 重命名/重构自定义用户模型
- google-apps-script - 如何添加一个 gsheet 菜单项,单击该菜单项会在现有工作表中打开一个选项卡
- pytorch - PyTorch 无法检测 CUDA
- django - 带有 Redis 和 Django 的 Celery 在长时间运行的任务中给出 WorkerLostError
- spring-boot - 查询中的可选参数不适用于 db2,但适用于 oracle
- javascript - Make function calls sequentially from a array of objects without waiting for result
- android - 如何为不同版本的应用程序模块化地保留服务端应用程序
- java - Java code to compare excel sheets does not work for larger files
- cumulocity - 如何使用 REST 在 Cumulocity 中创建设备组