大数相乘
#include <stdio.h> #include <string.h> #include <stdlib.h> #define N 100 void GetDigits(int *a,char *s); void multiply(int *a,int *b,int *c); main() { char s1[N],s2[N]; int i,j,a[N],b[N],c[N*2]; printf("\n input number a: "); scanf("%s",s1); printf("\n input number b: "); scanf("%s",s2); //把输入的字符串,按位存放到数组 GetDigits(a,s1); GetDigits(b,s2); multiply(a,b,c); //找到最高位 j=N*2-1; while(c[j]==0) j--; //打印计算结果 printf("\n %s * %s=",s1,s2); for(i=j;i>=0;i--) printf("%d",c[i]); } /*把字符串形式的数字按位存放到数组*/ void GetDigits(int *a, char *s) { int i; char digit; int len=strlen(s); for(i=0;i<N;i++) *(a+i)=0; for(i=0;i<len;i++) { digit=*(s+i); *(a+len-1-i) = digit - '0'; } } /*把a*b的结果存储到数组c中,按位表示*/ void multiply(int *a,int *b,int *c) { int i,j; //先把结果数组设置为0zsw for(i=0;i<N*2;i++) *(c+i)=0; for(i=0;i<N;i++) for(j=0;j<N;j++) *(c+i+j)+=*(a+i) * *(b+j); // 处理进位 for(i=0;i<N*2-1;i++) { *(c+i+1)+=*(c+i)/10; //进位累加到高位 *(c+i)=*(c+i)%10; //该位的最后结果 } }