我的任务是向另一个添加一个非常大的数字并打印结果。 这是我的实现,它应该输出1000作为输出,但它写入0000。
它应该如何运作: 如果两个数字的长度相等: 只有/ 10表示剩下的数字%10。如果结果的长度大于原始值,则将最后一个余数添加到输出数组的最后一个元素。
如果两个数字的长度不同: 对交叉部分求和并将余数(以temp为单位)加到相对的补码上。
有什么问题?
static int[] SumOfBigNumbers(int[] firstNumber, int[] secondNumber)
{
int temp = 0;
int maxLength = (Math.Max(firstNumber.Length, secondNumber.Length));
int minLength = (Math.Min(firstNumber.Length, secondNumber.Length));
int[] output = new int[maxLength + 1];
//sum of equal part
for (int counter = 0; counter < minLength; counter++)
{
output[counter] = (firstNumber[counter] + secondNumber[counter] + temp) % 10;
temp = (firstNumber[counter] + secondNumber[counter] + temp) / 10;
}
//exceptions add the temp to the bigger array
if (temp!=0)
{
//if first array is bigger than the second
if (firstNumber.Length > secondNumber.Length)
{
for (int i = minLength; i < maxLength + 1; i++)
{
output[i] = (firstNumber[i] + temp) % 10;
temp = (firstNumber[i] + temp) / 10;
}
}
//if second array is bigger than the first
else if (firstNumber.Length < secondNumber.Length)
{
for (int i = minLength; i < maxLength + 1; i++)
{
output[i] = (secondNumber[i] + temp) % 10;
temp = (secondNumber[i] + temp) / 10;
}
}
//if two number has equal length but there is temp left
else
{
output[maxLength] = temp;
}
}
return output;
}
static void Main()
{
int[] firstArray = new int[3] { 0, 0, 5 };
int[] secondArray = new int[3] { 0, 0,5 };
int[] output = SumOfBigNumbers(firstArray, secondArray);
foreach (var i in output)
{
Console.WriteLine(output[i]);
}
}
编辑:如果我复制任务会更好:编写一个计算两个非常长的正整数之和的方法。数字表示为数组,最后一个数字(数字)存储在索引0的数组中。使该方法适用于长度最多为10,000位的所有数字。
答案 0 :(得分:3)
虽然BigInteger是处理大数字的更好方法,但我认为你的错误在于打印输出时。试试这个:
foreach (var i in output)
{
Console.WriteLine(i);
}
这也会打印0001
,最好在打印时将其反转
答案 1 :(得分:0)
您的代码工作正常,但您有一个小错误,您可以在其中显示output
数组。
您执行了foreach (var i in output) {
,但是使用i
作为索引,但它并非如此。它已经是实际价值了。只需将i
写入控制台即可。
foreach (var i in output)
{
Console.WriteLine(i);
}
// Output:
// 0
// 0
// 0
// 1
或者使用for
循环按索引遍历数组。
for (int i = 0; i < output.Length; i++)
{
Console.WriteLine(output[i]);
}
// Output:
// 0
// 0
// 0
// 1