所以我有两个整数数组。我需要将它们相乘,但为此我需要将每个步骤的结果存储在一个临时数组的元素中。例如:
说数组是:
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];
}
那么如何在不覆盖数据的情况下在现有元素中追加数据呢?
答案 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;
}
嵌套循环的工作方式如下:
数组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 ++之前,我写出了这个答案。我的语法可能有些偏差,但逻辑本身应该是合理的。