c++ - C:将大数从字符串转换为以 n 为模的整数

标签 c++ c type-conversion algebra abstract-algebra

我正在尝试将非常大的数字(>100 位数字)从字符串转换为 Zn 加法组(模 n)中的整数。 n 保证在标准 C int 范围内(例如 n=12345)。

无论是 atoi 然后“%”的简单方法,还是 BigIntiger 在这里都不起作用。

有什么想法可以实现吗?

最佳答案

我假设您的问题中指的是 C++(不存在 C/C++ 这样的东西)。 atoi 将字符串转换为适合标准整数(32 位)的数字,因此这不是您想要的。您必须编写自己的转换函数。

为了使数学简单,我们假设您的数字是正数。首先注意模数下的加法和乘法与没有模数时的加法和乘法是等价的。所以我们只需要保留这两个运算的结果,模n。然后注意我们可以逐位构造大数:

unsigned int convert(const char* s, int n) {
    long long x = 0;
    for (char *p = s; *p; p++) {
        x *= 10;
        x += (int)(*p - '0');
        x %= n;
    }
    return x;
}

为了清楚起见,我省略了任何错误检查。作为练习,编写一些附加代码以确保 s 是一个有效的空终止字符串,表示一个大整数,没有任何空格/附加格式。

关于c++ - C:将大数从字符串转换为以 n 为模的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34290034/

相关文章:

c - 我怎样才能像这样进行结构类型转换?

c++ - 从现有对象创建对象

c++ - Bison 移位/减少冲突无法解决

c - 如何让一个线程在C中连续唤醒并挂起500ms

mysql - 使用 JOIN 语句时阅读器不起作用

C# var 有强类型吗?

r - 如何通过 R 中的 dplyr/tidyverse 将分组行复制到列中?

c++ - 如何获取和比较数据?

c++ - 为什么我的异常没有被捕获

c - C 中用 Last 覆盖的数组元素