[問題] 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