我目前正在使用非常大的数字,我想用它们做简单的计算,但我有问题。当我从字节数组创建数字时,甚至c#BigInteger超时。
bytearrays真的非常大,比如每个多达几MB。
所以我认为我可以创建一个“字节数组计算器”,它需要2个数组并添加/减去它们。
bit[] result = BitArrCalculator.Add(arrA, arrB)
// arrA is 1001 (9)
// arrB is 11 (3)
// then result should be 1100 (12)
因为我有非常大的数字,所以我无法将它们转换为整数并再次转换回来。至少不在c#中。如果有其他语言可以做到这一点,我可以改变语言,但我想有一个可以处理任意数组大小的解决方案。
这感觉应该存在一个解决方案/库/框架,但我还没有找到它。
所以我的问题: 使用位/字节数组并对它们进行加法/减法的最佳方法是什么?是否有任何工具/库?
答案 0 :(得分:0)
未测试。
byte[] Add( byte[] one, byte[] two )
{
byte[] ret = new byte[ Math.Max( one.Length, two.Length ) ];
int carry = 0;
for( int i = 0; i < one.Length && i < two.length; ++i )
{
int total = (int)one[i] + two[i] + carry;
if( total > 255 )
{
carry = total - 255;
total = total - carry;
}
ret[i] = (byte) total;
}
// at most one of these for loops will execute
for( int j = i; j < one.Length; ++j )
{
int total = carry + one[j];
if( total > 255 )
{
carry = total - 255;
total = total - carry;
}
ret[j] = (byte) total;
}
for( int j = i; j < two.Length; ++j )
{
int total = carry + two[j];
if( total > 255 )
{
carry = total - 255;
total = total - carry;
}
ret[j] = (byte) total;
}
if( carry > 0 ) { /* have to add another byte to the array */ }
return ret;
}
答案 1 :(得分:0)
我决定编写自己的类,可以使用两个给定的位数组进行加法和减法。对我来说,在我的项目中,使用位而不是字节更有意义。使用位进行加法和减法的逻辑非常简单。