#18896: 直接乘除溢位


k487237 (chenchen)

學校 : 國立臺中第一高級中學
編號 : 75487
來源 : [140.113.90.32]
最後登入時間 :
2020-04-15 01:15:32
e355. Squares and Rectangle in Rectangle -- TIOJ 1015 改編 | From: [61.223.26.186] | 發表日期 : 2019-08-11 21:50

有點不懂

為啥直接乘出結果來會溢位

分開乘就不會

是因為系統的位元數不夠嗎?

 
#18897: Re:直接乘除溢位


inversion (「我們所認識的可符香是個像天使的好女孩」之葉林 *Cries...)

學校 : 國立清華大學
編號 : 43537
來源 : [49.159.6.107]
最後登入時間 :
2022-05-28 19:29:12
e355. Squares and Rectangle in Rectangle -- TIOJ 1015 改編 | From: [49.158.83.43] | 發表日期 : 2019-08-11 22:24

有點不懂

為啥直接乘出結果來會溢位

分開乘就不會

是因為系統的位元數不夠嗎?

我不確定您的分開乘跟直接乘分別是什麼意思,所以我只能說:

記得將變數宣告成 long long (64 bits),避免溢位。

而且要考慮預設的隱性轉換的時間點是在賦值的時候,所以有可能在計算的時候溢位。

以上。

 
#18900: Re:直接乘除溢位


k487237 (chenchen)

學校 : 國立臺中第一高級中學
編號 : 75487
來源 : [140.113.90.32]
最後登入時間 :
2020-04-15 01:15:32
e355. Squares and Rectangle in Rectangle -- TIOJ 1015 改編 | From: [114.38.150.181] | 發表日期 : 2019-08-12 14:10

有點不懂

為啥直接乘出結果來會溢位

分開乘就不會

是因為系統的位元數不夠嗎?

我不確定您的分開乘跟直接乘分別是什麼意思,所以我只能說:

記得將變數宣告成 long long (64 bits),避免溢位。

而且要考慮預設的隱性轉換的時間點是在賦值的時候,所以有可能在計算的時候溢位。

以上。

有用long long試過哦

直接乘是指:

long long total = n的取法 * m的取法;

就不把公式寫出來了

而分開乘則是

long long total, a = n的取法, b = m的取法;
total = a * b;

這樣算出來的total就會是對的,所以才覺得有點奇怪

 
#18901: Re:直接乘除溢位


inversion (「我們所認識的可符香是個像天使的好女孩」之葉林 *Cries...)

學校 : 國立清華大學
編號 : 43537
來源 : [49.159.6.107]
最後登入時間 :
2022-05-28 19:29:12
e355. Squares and Rectangle in Rectangle -- TIOJ 1015 改編 | From: [49.158.83.43] | 發表日期 : 2019-08-12 17:40

有點不懂

為啥直接乘出結果來會溢位

分開乘就不會

是因為系統的位元數不夠嗎?

我不確定您的分開乘跟直接乘分別是什麼意思,所以我只能說:

記得將變數宣告成 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 的範圍。

 
#18903: Re:直接乘除溢位


k487237 (chenchen)

學校 : 國立臺中第一高級中學
編號 : 75487
來源 : [140.113.90.32]
最後登入時間 :
2020-04-15 01:15:32
e355. Squares and Rectangle in Rectangle -- TIOJ 1015 改編 | From: [114.38.150.181] | 發表日期 : 2019-08-12 18:02

 

n 、 m 的型態是宣告成 int 嗎?如果是的話,就是因為計算的時候還沒有隱性轉型成 long long 導致計算結果溢位出 2 ^ 31 的範圍。

還真的是因為這個原因的說

又學到了一課,非常感謝

 
ZeroJudge Forum