[问题] C++ 做平方根

楼主: asdfg1597860 (Jay)   2018-12-14 15:35:47
开发平台(Platform): (Ex: Win10, Linux, ...)
WIN10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VS2015
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
各位前辈好
小弟在做平方根时(只需要取整数部分ex:输入8,得到2)
发现数字变大后会出现错误的输出
不知道是不是程式有欠缺考虑的部分
喂入的资料(Input):
2147395600
预期的正确结果(Expected Output):
46340
错误结果(Wrong Output):
289398
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
int mySqrt(int x) {
int num = 1;
int sqt = 1;
while (x >= sqt)
{
num ++;
sqt = num * num;
}
return num-1;
}
补充说明(Supplement):
作者: tsoahans (ㄎㄎ)   2018-12-14 15:47:00
溢位了 int的上限是2147483647,46341^2就超过了
作者: sorryla (Mr.东)   2018-12-14 16:29:00
你有全部都改成long long,包含回传值吗?
作者: LPH66 (-6.2598534e+18f)   2018-12-14 19:15:00
没先把 num 转型则 num*num 的结果依然是原来型别改写成这样则第一个被你转大, 第二个比较小的会配合转大乘法的结果就是大型别

Links booklink

Contact Us: admin [ a t ] ucptt.com