1wintc编译111 10有真确结果,大的数就没结果,还说什么遇到非法指令 vc下没任何结果,可是可以编译连接成功 2我觉的我的formal不好如果是数组元素是3位以上就不行,应该怎么先判断位数在调整呀 #include<stdio.h> #include<conio.h> #define MAX 100 int formal(int *pA) { /* 将数组各位调整为小于9的数,大于9时进位?
*/ int i;
for(i = 1;i <= pA[0] || pA[i]>=10; i++) { if(i >= pA[0]) pA[i+1] = 0; pA[i+1] += pA[i] / 10; pA[i] = pA[i] % 10; } if( pA[i+1] != 0) pA[0] = i+1;
return pA[0]; } int mul(int *a,int *b,int *c) { int i,j,t;
for(i = 0; i < MAX;i++) c[i] = 0; for(i = 1; i <= a[0];i++) { for(j = 1,t = i;j <= b[0];j++) c[t++] += a[i] *b[j]; } c[0] = a[0] + b[0] -1; formal(c);
return c[0]; }
void main() { int a[4] = {3,1,1,1}; int b[3] = {2,1,1}; int c[5]; int i;
mul(a,b,c); for(i=1; i <=4;i++) printf("%4d",c[i]);
getch(); }
楼主,你的c数组好象太小的吧? #define MAX 100 //这里你定义最大为100 然后在mul函数里: for(I = 0; I < MAX;i++) c[i] = 0; 可是,在main()函数里,你却写的是: int c[5]; 明显会出现数组越界呀。 我改了后就好了。以下是改后代码: #include<stdio.h> #include<conio.h> #define MAX 100 int formal(int *pA) { /* 将数组各位调整为小于9的数,大于9时进位?
*/ int I;
for(I = 1;I <= pA[0] || pA[i]>=10; i++) { if(I >= pA[0]) pA[i+1] = 0; pA[i+1] += pA[i] / 10; pA[i] = pA[i] % 10; } if( pA[i+1] != 0) pA[0] = i+1;
return pA[0]; } int mul(int *a,int *b,int *c) { int I,j,t;
for(I = 0; I < MAX;i++) c[i] = 0; for(I = 1; I <= a[0];i++) { for(j = 1,t = I;j <= b[0];j++) c[t++] += a[i] *b[j]; } c[0] = a[0] + b[0] -1; formal©;
return c[0]; }
int main() { int a[4] = {3,1,1,1}; int b[3] = {2,1,1}; int c[100]; int I;
mul(a,b,c); for(i=1; I <=4;i++) printf("%4d",c[i]);
getch();
return 0; }
|