如何在现有数组元素中追加数据而不覆盖元素中的数据

时间:2015-04-08 13:22:23

标签: c arrays append

所以我有两个整数数组。我需要将它们相乘,但为此我需要将每个步骤的结果存储在一个临时数组的元素中。例如:

说数组是:

arf [2] = {1,2};

ars [2] = {3,2};

TMP [20]; //每个步骤的临时数组

资源[20]; //将每个步骤结果存储在元素

现在为了乘法,我们首先做2 * 2并将其存储在 tmp [1]中, 然后2 * 1并将其存储在 tmp [0]中, 答案是24.现在我需要在 res 数组的第一个元素中存储24个。所以 res [0] = 24.同样适用于3 * 12.我知道我需要用for循环来做。我将tmp [1]存储在res [0]中,我需要将tmp [0]附加到res [0],但它会覆盖它。

在这种情况下,

c为2,因为arf和ars各有2个元素。

for (k = c - 1; k >= 0; k--)
        {
            res[i] = tmp[k];
        }

那么如何在不覆盖数据的情况下在现有元素中追加数据呢?

1 个答案:

答案 0 :(得分:0)

int myMult(int[] num1, int num1Size, int[] num2, int num2Size)
{
  //reverse the arrays so exponent work simplifies
  int newNum1[num1Size];
  for(int i = 0; i < num1Size; i++)
    newNum1[i] = num1[num1Size - 1 - i];
  int newNum2[num2Size];
  for(int i = 0; i < num1Size; i++)
    newNum2[i] = num2[num2Size - 1 - i];

  //create an array to store temporary values
  int temp[num1Size + num2size];
  for(int i = 0; i < num1Size + num2Size; i++)
    temp[i] = 0;

  //perform multiplication digit-wise
  for(int j = 0; j < num2Size; j++;)
  {
    //multiply the given digit through the first number
    for(int i = 0; i < num1Size; i++)
      //add the result to the location in temp, don't replace it
      temp[i+j] += newNum1[i] * newNum2[j];
  }

  //add up the values stored in temp
  int result = 0;
  for(int i = 0; i < num1Size + num2Size; i++)
    result += temp[i] * pow(10, i);

  return result;
}

嵌套循环的工作方式如下:

  1. 从第二个号码的位置开始(在您的示例中为2)
  2. 将该值乘以第一个数字并将结果存储在temp中(temp [0] = 2 * 2 + 0 = 4,temp [1] = 2 * 1 + 0 = 2)
  3. 重复数十位,但转移到添加结果的位置(temp [1] = 3 * 2 + 2 = 8,temp [2] = 3 * 1 + 0 = 3;)
  4. 数组temp表示结果的每个数字。例如,temp [0]代表那个地方,而temp [1]代表十位。当您添加数组的值时,您会考虑位置值。

    在你的例子中,我们有temp [] = {4,8,3}; 因此,当我们通过temp添加时,我们得到:

    4 * 10 ^ 0 + 8 * 10 ^ 1 + 3 * 10 ^ 2 = 4 + 80 + 300 = 384,这应该是它。

    希望这有帮助

    注意:在我意识到这是C而不是C ++之前,我写出了这个答案。我的语法可能有些偏差,但逻辑本身应该是合理的。