C语言一维数组乘法

a[3] 1 2 3
X b[2] 4 5
-------------------
c[5] 5355

对于这个一维数组乘法,用C语言编写个程序,不能用函数,只能是最基础的数组运算。老师说几行代码就能写下来,我怎么也没想到算法。

确定维数的话就简单,直接运算:
x=a[2]+b[1]
c[4]=x%10
x=a[1]+b[0]+x/10//最后这个事进位
c[3]=x%10
x=a[0]+x/10
c[2]=x%10
c[1]=x/10
c[0]=0
你也可以用循环。

另一种是先求值:
a=100*a[0]+10*a[1]+a[2]
b=10*b[0]+b[1]
c=a+b
c[4]=c%10//得到末位
c=c/10//去除末位
c[3]=c%10
c=c/10
c[2]=c%10
c=c/10
c[1]=c%10
c=c/10
c[0]=c%10
没有考虑语法,自己解决
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-08-09
我觉得此题的本意应该是通过类似于
我们小时候列式计算乘积那样来实现结果的
1 2 3
× 4 5
-----------
6 1 5
4 9 2
-----------
5 5 3 5

感觉LS几位都有投机取巧的地方。。。。

本人代码如下,欢迎提问:
#include <stdio.h>
#define m 3
#define n 2
int main()
{
int a[m]={1,2,3},b[n]={4,5},c[m+n]={0},i,j,k,t,max=0;
for (j=n-1;j>=0;j--)
{
k=n-1-j;
for(i=m-1;i>=0;i--)
{
c[k]+=b[j]*a[i];
t=k;
while (c[t]>9)
{
c[t+1]+=c[t]/10;
c[t]%=10;
t++;
if (t>max)max=t;
}
k++;
}
}
while(max>=0)printf("%d",c[max--]);
printf("\n");
return 0;
}追问

感觉你这个最好,但看不太懂,能说下具体的算法思路吗?

追答

你列一下式看看
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++;
}
}

本回答被提问者采纳
第2个回答  2011-04-27
int m=a[0]*100+a[1]*10+a[2];
int n=b[0]*10z+b[1];
int s=m*n;
对于5355往数组里存,先用5355除1000等于5 在用(5355-5000)除100得到3.以此类推。我这没安c的开发环境。大概思路吧。
如果可以用pow()函数的话应该还是少写点。
至于m n的求法,可以用循环得来。
第3个回答  2011-04-27
自己写的,运行结果正确

#include <stdio.h>
#include <stdlib.h>

#define NUM_A 3
#define NUM_B 2

int main(void) {
int a[NUM_A] = { 1, 2, 3 }, b[NUM_B] = { 4, 5 }, i, j, k;

int tmp, result = 0;

for (i = 0; i < NUM_A; i++) {
k = NUM_A - 1 - i;
while (k-- > 0) {
a[i] *= 10;
}
for (j = 0; j < NUM_B; j++) {
k = NUM_B - 1 - j;
tmp = b[j];
while (k-- > 0) {
tmp *= 10;
}
result += a[i] * tmp;
}
}

printf("%d\n", result);

return 0;
}
第4个回答  2011-04-27
#include<stdio.h>
void main()
{int a[3]={1,2,3},b[2]={4,5},c[10];
int m=0,n=0,i;
for (i=0;i<3;i++)
m=m*10+a[i];//m=123
printf("%d\n",m);
for(i=0;i<2;i++)
n=n*10+b[i];//n=45
printf("%d\n",n);
m=m*n;
printf("a[3]*b[2]=%d\n",m);
for (i=0;m!=0;i++)
{c[i]=m%10;
m=m/10;
}
for(i--;i>=0;i--)
printf("%d",c[i]);
}
相似回答