作者asdfg1597860 (Jay)
看板C_and_CPP
标题[问题] C++ 做平方根
时间Fri Dec 14 15:35:47 2018
开发平台(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):
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.127.200.146
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1544772949.A.B14.html
1F:推 tsoahans: 溢位了 int的上限是2147483647,46341^2就超过了 12/14 15:47
谢谢前辈 确实是我疏忽了 改成unsigned int 就正常了
不过改成long long还是错误 不晓得是什麽原因
※ 编辑: asdfg1597860 (59.127.200.146), 12/14/2018 16:11:22
※ 编辑: asdfg1597860 (59.127.200.146), 12/14/2018 16:16:03
2F:推 sorryla: 你有全部都改成long long,包含回传值吗? 12/14 16:29
确实没有 这是因为型别不一致的关系吗 在 sqt = (long long) num*num 确实会变正常
※ 编辑: asdfg1597860 (59.127.200.146), 12/14/2018 16:52:57
3F:推 LPH66: 没先把 num 转型则 num*num 的结果依然是原来型别 12/14 19:15
4F:→ LPH66: 改写成这样则第一个被你转大, 第二个比较小的会配合转大 12/14 19:16
5F:→ LPH66: 乘法的结果就是大型别 12/14 19:16
谢谢前辈说明
※ 编辑: asdfg1597860 (59.127.200.146), 12/22/2018 15:09:41