将任意大小的字符串转换为任意精度的整数(bigint)

标签 c algorithm math types bignum

我正在尝试对任意大整数实现 Solovoy-Strassen 素性测试。我还将编写一个 bignum (不能使用第三方实现,因为这是一个学术项目)。我决定使用以下 bignum 结构:

struct {
  uint64_t *tab;
  int size; // number of limbs
  int sign;
}

我将使用 base-32 作为我的数字(因此 uint64_t,对于部分产品,至少我假设它们将是部分产品)。该决定基于 previous question asked.

我处于停滞状态。我无法想象如何将一个表示为任意大小的小数的字符串并将其转换为上面的 bignum 结构。

有人可以启发我吗?即使是一个较小的示例也很好,例如将任意字符串转换为八进制数字,并将其存储在 uint16_t 数组中。

谢谢。

最佳答案

您需要进行算术运算,调用您的例程。例如,如果字符串是“2013”​​(表示十进制的 2013),则执行: a=0; a=10*a+2; a=10*a+0; a=10*a+1; a=10*a+3

关于将任意大小的字符串转换为任意精度的整数(bigint),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2709616/

相关文章:

C 文件按行读取到自定义分隔符

c - 填写结构表

在 GPS 坐标数据库中查找 'hot spots' 的算法

java - (JAVA) 数组中整数的相加

math - 变换以消除共线点

c - C 中的数组排序

c - 如何从具有与学生完全相同的索引的文件中打印一行?

c++ - 高效分组重叠矩形

algorithm - 是否有时间校正速度 Verlet 算法?

algorithm - 不重复地计算来自多个列表的成对项目的组合