4、个n 进制数组,n 可以取值为2 的16次方,即0x1000,假如将一个二进制为1024位的大数转化成0x1000进制,它就变成了64位,而每一位的取值范围就不是二进制的0—1或十进制的0—9,而是0-0xffff,我们正好可以用一个无符号整数来表示这一数值。所以1024位的大数就是一个有64个元素的unsigned int数组,针对unsigned int数组进行各种运算所需的循环规模至多64次而已。而且0x10000 进制与二进制,对于计算机来说,几乎是一回事,转换非常容易。加法:A=Sum[i=0 to p](A[i]*0x10000**
5、i);B=Sum[i=0 to q](B[i]*0x10000**i),p>=q;C=Sum[i=0 to n](C[i]*0x10000**i)=A+B。如果用carry[i]记录每次的进位则有:C[i]=A[i]+B[i]+carry[i-1]-carry[i]*0x10000,其中carry[-1]=0。若A[i]+B[i]+carry[i-1]>0xffffffff,则carry[i]=1;反之则carry[i]=0,若carry[p]=0,则n=p;反之则n=p+1。减法与加法同理。..因此: C[i]=Sum[j=0 to q](A
6、[i-j]*B[j])+carry[i-1]-carry[i]*0x10000,其中carry[-1]=0,carry[i]=(Sum[j=0 to q](A[i-j]*B[j])+carry[i-1])/0x10000,n=p+q-1,若carry[n]>0,则n=n+1,C[n]=carry除法设A=Sum[i=0 to p](A[i]*0x10000**i),B=Sum[i=0 to q](B[i]*0x10000**i),p>=q, C=Sum[i=0 to n](C[i]*0x10000**i)=A/B。由于无法将B 对A “试商”