高精度乘法
阿新 • • 發佈:2017-07-01
我們 末尾 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]);
高精度乘法