有點不懂
為啥直接乘出結果來會溢位
分開乘就不會
是因為系統的位元數不夠嗎?
有點不懂
為啥直接乘出結果來會溢位
分開乘就不會
是因為系統的位元數不夠嗎?
我不確定您的分開乘跟直接乘分別是什麼意思,所以我只能說:
記得將變數宣告成 long long (64 bits),避免溢位。
而且要考慮預設的隱性轉換的時間點是在賦值的時候,所以有可能在計算的時候溢位。
以上。
有點不懂
為啥直接乘出結果來會溢位
分開乘就不會
是因為系統的位元數不夠嗎?
我不確定您的分開乘跟直接乘分別是什麼意思,所以我只能說:
記得將變數宣告成 long long (64 bits),避免溢位。
而且要考慮預設的隱性轉換的時間點是在賦值的時候,所以有可能在計算的時候溢位。
以上。
有用long long試過哦
直接乘是指:
long long total = n的取法 * m的取法;
就不把公式寫出來了
而分開乘則是
long long total, a = n的取法, b = m的取法;
total = a * b;
這樣算出來的total就會是對的,所以才覺得有點奇怪
有點不懂
為啥直接乘出結果來會溢位
分開乘就不會
是因為系統的位元數不夠嗎?
我不確定您的分開乘跟直接乘分別是什麼意思,所以我只能說:
記得將變數宣告成 long long (64 bits),避免溢位。
而且要考慮預設的隱性轉換的時間點是在賦值的時候,所以有可能在計算的時候溢位。
以上。
有用long long試過哦
直接乘是指:
long long total = n的取法 * m的取法;
就不把公式寫出來了
而分開乘則是
long long total, a = n的取法, b = m的取法;
total = a * b;
這樣算出來的total就會是對的,所以才覺得有點奇怪
n 、 m 的型態是宣告成 int 嗎?如果是的話,就是因為計算的時候還沒有隱性轉型成 long long 導致計算結果溢位出 2 ^ 31 的範圍。
n 、 m 的型態是宣告成 int 嗎?如果是的話,就是因為計算的時候還沒有隱性轉型成 long long 導致計算結果溢位出 2 ^ 31 的範圍。
還真的是因為這個原因的說
又學到了一課,非常感謝