1. 程式人生 > >高精度乘法

高精度乘法

我們 末尾 pre family break 存儲 har div 大數

計算大數間的乘法,原理來源我們的乘法筆算

          1   2   3
  *       5   6   7
  *--------------------------
          7   14  21
      6   12  18
 5   10   15   
*--------------------------
 5   16   34  32  21

高精度乘法一共分為4步:

1.運算前的準備:

(1)輸入兩個字符串

1 char num1[100] = {0}, num2[100] = {0};
2 int a[100] = {0}, b[100] = {0};
3 scanf("
%s%s", num1, num2); 4 int n = strlen(nmu1); 5 int m = strlen(num2);

(2)將其轉化為數字形式。註意:因為乘法從末尾開始,所以數字要倒敘存儲。

1 int i, j;
2 for(i = 0, j = n-1; i < n; i++, j--) 
3   a[i] = nmu1[j]-0;
4 for(i = 0; j = m-1; i < m; i++, j--)
5   b[i] = num2[j]-0;

2.一位一位的運算。

1 int c[3000] = {0};
2 for(i = 0; i < n; i++) {
3 for(j = 0; j < m; j++) 4 c[i+j] = a[i] * b[j]; 5}

3.處理進位。

1 for(i = 0; i < n+m; i++) {
2   if(c[i] > 10) {
3     c[i+1] += c[i] / 10;
4     c[i] %= 10;   
5   }
6 }

4.輸出結果。

1 for(i = n+m-1; i >= 0; i--) {
2   if(c[i]) {
3     j = i;
4     break;
5   }
6 }
7 for(i = j; i < n+m; i++)
8 printf("%d", c[i]);

高精度乘法