****:
就是高精度乘
模擬小學時學乘法豎式的方法
比如123*456
首先用乙個陣列a儲存123
a[0]=1; a[1]=2; a[2]=3;
再用另外乙個陣列b儲存456
b[0]=4; b[1]=5; b[2]=6;
做三次高精乘單精,如下:
a乘以b[0],得到c0陣列為
c0[0]=a[0]*b[0]=4
c0[1]=a[1]*b[0]=8
c0[2]=a[2]*b[0]=12
a乘以b[1],得到c1陣列為
c1[0]=a[0]*b[1]=5
c1[1]=a[1]*b[1]=10
c1[2]=a[2]*b[1]=15
同理,a乘以b[2],得到c2陣列為
c2[0]=6
c2[1]=12
c2[2]=18
c0[0] c0[1] c0[2]
______c1[0] c1[1] c1[2]
____________c2[0] c2[1] c2[2]
--------------------------------
_d[0] d[1] d[2] d[3] d[4]
_4 13 28 27 18
最後一步,是對d陣列的整理啦
從個位開始,每一位,如果大於9,則求模,前一位進製
for (i=4; i>0; i--)
__if (d[i]>9)
__d[0] d[1] d[2] d[3] d[4]
5 6 0 8 8
因此,依次輸出,得到56088
123*456=56088
大數相乘亦此道理也~
#include
#include
#include
#define max 100 //這個數可以根據需要調整!
char res[max];
void init_char(char *res)
}int carry = 0 ; // 整型結果轉化為字元型結果.
for(i=max-1; i>=0; i--)
//--------------------輸出乘積!
printf("相乘的結果為:\n");
for(i=0;i=0;i--) //往res陣列存放乘數a.
res[max+i-len] = a[i];
}int main()
大整數乘法
參考 http hi.baidu.com operationsystem blog item 6e45dd1af1acadf3ae51330b.html 在計算機中,長整型 long int 變數的範圍是 2147483648 至 2147483647,因此若用長整型變數做乘法運算,乘積最多不能超過...
大整數乘法
問題描述 by 計算機演算法設計與分析 王曉東 p17 通常,在分析乙個演算法的計算複雜性時,都將加法和乘法運算當作是基本運算來處理,即將執行一次加法或乘法運算所需的計算時間當作乙個僅取決於計算機硬體處理速度的常數。這個假定僅在計算機硬體能對參加運算的整數直接表示和處理時才是合理的。然而,在某些情況...
大整數乘法。
include using namespace std int multi int num1,int size1,int num2,int size2 int size size1 size2 int ret new int size int i 0 for i 0 iret i 0 for i 0...