a[3] 1 2 3
X b[2] 4 5
-------------------
c[5] 5355
对于这个一维数组乘法,用C语言编写个程序,不能用函数,只能是最基础的数组运算。老师说几行代码就能写下来,我怎么也没想到算法。
感觉你这个最好,但看不太懂,能说下具体的算法思路吗?
追答你列一下式看看
1 2 3
× 4 5
-----------
6 1 5
4 9 2
-----------
5 5 3 5
c[]是倒序存储结果的。。。。
第一次
j=1,k=0
b[j]=5
i=2
a[i]=3
c[k]+=3*5
c[k]=15
因为15>9所以要进位
c[k+1]+=c[k]/10
c[k+1]=0+15/10=1
c[k]=c[k]%10=15%10=5
.....大概就这样吧。。。用文字不好表达。。。。
for (int j=n-1;j>=0;j--)
{
k=n-1-j;//第二个乘数当前运算的所在位数
for(int i=m-1;i>=0;i--)
{
c[k]+=b[j]*a[i];
int t=k;
while (c[t]>9)
{//大于9时向上进位
c[t+1]+=c[t]/10;
c[t]%=10;
t++;
if (t>max)max=t;//记录最大位数位置
}
k++;
}
}