如何在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