我应该按照我们以前的方式将两个3位数字相乘。 我需要将数字的每个数字乘以其他数字的数字,计算进位,添加单个产品并存储结果。 我能够存储获得的3种产品(用于I / P 234和456): 1404 1170 0936 ..在2D阵列中。
现在,当我尝试按以下方式安排它们时: 001404 011700 093600 轻松添加以获得结果;由:
for(j=5;j>1;j--)
{
xx[0][j]=xx[0][j-2];
}
for(j=4;j>0;j--)
{
xx[1][j]=xx[1][j-1];
}
xx是我在3个产品中存储的2D数组。 在我这样做之前,一切似乎都很顺利:
xx[0][0]=0;
xx[0][1]=0;
xx[1][0]=0;
当事情出错时,就在这里。这些价值得到了巩固。在打印时,我得到001400 041700 093604。 我做错了什么?
答案 0 :(得分:0)
假设xx
的第一个索引是部分和,第二个索引是该总和中的数字,并且部分总和以最低索引处的最高位存储,
for (int i = 0; i < NUM_DIGITS; i++) // NUM_DIGITS = number of digits in multiplicands
{
for (int j = 5; j >= 0; j--) // Assuming 5 is big enough
{
int index = (j - 1) - (NUM_DIGITS - 1) - i;
xx[i][j] = index >= 0 ? xx[i][index] : 0;
}
}
当然,有更多有效/逻辑的方法,例如避免单独存储数字,但在问题的限制范围内,这应该给你正确的答案。