大数相乘
2014-03-17 12:56
148 查看
#include <string.h> #include <stdio.h> #define SIZE 50 int a[SIZE],b[SIZE],c[SIZE*2]; void big_multi(int a[],int b[],int c[]) { int i,j; for (i=0;i<SIZE;i++) for(j=0;j<SIZE;j++) c[i+j] += a[i]*b[j];//这里计算每位对应的计算结果,暂不考虑进位 for (i=0;i<SIZE*2;i++) { c[i+1] += c[i]/10;//这里就是进位,因为每位/10的商就是进位 c[i] %= 10;//这里就是每位对应的最终结果 } } int main() { //两个大整数 char A[] = "123456789"; char B[] = "987654321"; char C[2*SIZE]; int i = strlen(A)-1,j = strlen(B)-1; int index,k=0; //把大整数存储到数组中去,从大数的最低位依次存储到数组中 for (index = i;index >=0;index--) a[i-index] = A[index]-'0'; for (index = j;index >=0;index--) b[j-index] = B[index]-'0'; big_multi(a,b,c); //把结果存储到字符数组C中 index = i+j+1; while (!c[index]) index--; while (index!=-1) { C[k++] = c[index--]+'0'; } C[k] = 0; printf("%s * %s : \n%s\n",A,B,C); return 0; }