我想處理將兩個數字相乘會導致溢出的特殊情況。代碼看起來像這樣:int a = 20;long b = 30;// if a or b are big enough, this result will silently overflowlong c = a * b;那是一個簡化的版本。在實際程序中,a并且b在運行時從其他地方獲取。我想要實現的是這樣的:long c;if (a * b will overflow) { c = Long.MAX_VALUE;} else { c = a * b;}您如何建議我最好編寫此代碼?更新:a和b總是非負在我的情況。
3 回答

波斯汪
TA貢獻1811條經驗 獲得超4個贊
Java的8有Math.multiplyExact
,Math.addExact
等,為整數且長。這些會引發未經檢查ArithmeticException
的溢出。

收到一只叮咚
TA貢獻1821條經驗 獲得超5個贊
您可以改用java.math.BigInteger并檢查結果的大?。ㄉ形礈y試代碼):
BigInteger bigC = BigInteger.valueOf(a) * multiply(BigInteger.valueOf(b));
if(bigC.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0) {
c = Long.MAX_VALUE;
} else {
c = bigC.longValue()
}
添加回答
舉報
0/150
提交
取消