如何在C#中將兩個64位十進制數相乘而不會溢出?兩個64位數的乘法運算
回答
如果需要64個十進制位數字,如果他們是整數,則可以使用System.Numerics.BigInteger
結構(需要集的引用)。
BigInteger firstNumber = BigInteger.Parse("63518439492097324687235465876298368764576527346564625480");
BigInteger secondNumber = BigInteger.Parse("84890247648975285765484902890273086475254764765147643611");
BigInteger product = firstNumber * secondNumber;
不錯。我正在猜測的一個類實現了我要建議的內容(將數字分成易於管理的數字,並在部分中進行乘法運算) – Joe 2013-02-17 10:34:34
@Joe是的,它將它分解爲無符號的8位數字。它們被保存在一個'byte []'類型的數組中。我不知道給定大小的BigInteger需要多少次CPU乘法(可能取決於編譯模式和運行時根據實際硬件做出的決定)。 – 2013-02-17 10:56:58
您總是可以使用decimal
來存儲兩個long
數字相乘的結果。
long bigNumber = 12345678L;
long anotherBigNumber = 23456789L;
decimal result = bigNumber * anotherBigNumber;
乘法在你的例子中用'long'完成。即使你在乘法之前轉換爲「十進制」,也可能沒有足夠的「空間」。嘗試乘以'1000000000000000L'(十五個零)與相同大小的數字。如果你使用'long'乘法,結果將會「環繞」,如果你使用'decimal'乘法,它會拋出一個異常。 – 2013-02-17 10:44:54
他不會說'long'類型的數字。他要求增加64個編號。 – 2013-02-17 10:45:01
我想(只要你想)如果第一,你可以做的任何數量的計算,你轉換成字符串數(所以兩個獨立的字符串)比得到的最後一個數字(字符),並乘以與其他角色的每一個數字(就像你在學校學到的一樣)等等,並且將你的最終得分數字(也作爲字符串)添加到你。我知道這是可以做到的,這將是一開始的王道難題,但是一旦你創建了這個函數,你就可以乘以你想要的任何數字:)
如果它們是整數,則使用System.Numerics中的BigInteger類System.Numerics.dll!)
如果沒有,Codeplex中有一個BigRational類。它本意是在System.Numerics中,但它被踢了。鏈接: http://bcl.codeplex.com/releases/view/42782
- 1. 2個64位整數的SSE乘法
- 2. 算法使用32位無符號整數乘64位數
- 3. 64位乘法器在Fpga
- 4. 兩位補碼形式的乘法運算
- 5. 64位整數運算和位運算基準測試
- 6. 試圖在兩個函數之間進行乘法運算?
- 7. 加法和乘法的數學運算
- 8. Mysql乘法運算
- 9. 相乘兩個32位的數字,而不使用64位的int
- 10. 簡單的乘法運算
- 11. Python的乘法運算
- 12. Matlab的:乘法運算
- 13. JavaScript的乘法運算
- 14. 類向量 - 兩個非特定維向量的乘法運算
- 15. 彙編乘法操作64位
- 16. 64位定點乘法錯誤
- 17. 如何基於另一個具有兩個參數的函數使用乘法運算乘積
- 18. 從兩個表中觸發乘法運算
- 19. C中的64位數據類型(long long)的按位運算?
- 20. 作爲成員函數重載*乘法運算符兩次?
- 21. 重載乘法運算符
- 22. 混淆C++乘法運算
- 23. 數組隨機乘法運算
- 24. 乘以兩個32位寄存器,並在另一乘法運算中使用結果
- 25. 方法來計算連續兩個數的乘積的總和
- 26. 運行64位計算機的128位Fortran計算
- 27. 兩個數字的Mips乘法函數
- 28. x86彙編乘以兩個32位數
- 29. 乘以無乘法,除法和位運算符,並且沒有循環。遞歸
- 30. 乘以兩位小數
我不認爲你可以存儲一個64位數字在任何現代的CPU完全準確,假設你的意思是十進制數字,而不是二進制數字或別的東西。如果您有兩個64位數字(假設從非零開始),那麼結果將是大約128位數字(10^64 * 10^64 = 10^128)。哎喲。 – Joe 2013-02-17 10:30:48
你應該給出比這更多的信息。他們是整數嗎?這非常重要。數字在什麼基礎上?二進制?十進制?十六進制也許?它很重要。 – harold 2013-02-17 10:32:50
對不起,缺失的信息...兩個號碼。是小數點 – Bright 2013-02-17 10:38:12