C BigInt乘法概念问题

我正在C中构建一个小的BigInt库,用于我的编程语言.

结构如下:

short digits[ 1000 ];
int   len;

我有一个函数,通过将字符串拆分为单个字符并将它们放入数字,将字符串转换为bigint.

数字中的数字都是相反的,因此数字123将如下所示:

digits[0]=3 digits[1]=3 digits[2]=1

我已经设法编写了添加功能,它完美地运行.

它有点像这样:

overflow = 0
for i ++ until length of both numbers exceeded:
  add numberA[ i ] to numberB[ i ]
  add overflow to the result
  set overflow to 0
  if the result is bigger than 10:
    substract 10 from the result
    overflow = 1
  put the result into numberReturn[ i ]

(在这种情况下溢出就是当我添加1到9时会发生什么:从10中减去10,向溢出添加1,将溢出添加到下一个数字)

那么想想如何存储两个数字,如下:

   0 | 1 | 2
   ---------
A  2   -   -
B  0   0   1 

以上代表bigints 2(A)和100(B)的数字.
– 表示未初始化的数字,不访问它们.

所以添加上面的数字工作正常:从0开始,添加2 0,转到1,添加0,转到2,添加1

但:

当我想与上述结构进行乘法运算时,我的程序最终会执行以下操作:

从0开始,将2乘以0(eek),转到1,…

所以很明显,对于乘法,我必须得到这样的订单:

   0 | 1 | 2
   ---------
A  -   -   2
B  0   0   1 

然后,一切都会清楚:从0开始,将0乘以0,转到1,将0乘以0,转到2,乘以1乘以2

>如何设置将数字转换为正确的乘法形式?
>我不想做任何阵列移动/翻转 – 我需要性能!

解决方法:

>为什么你在[0..9]中使用short来存储数字就足够了
>你错误地想到了乘法.在乘法的情况下,你需要一个双循环,它将B与A中的每个数字相乘,并将它们与正确的10次幂相加.

编辑:由于一些匿名低估了这个没有评论这基本上是乘法算法:

bigint prod = 0
for i in A
    prod += B * A[i] * (10 ^ i)

B与A [i]的乘法是通过额外的for循环完成的,您还可以跟踪进位. (10 ^ i)是通过偏离目标索引来实现的,因为bigint在基数10中.

上一篇:php – 数字字符串(任意大小) – >多个整数


下一篇:10.2模拟赛总结