C: 将字符串中的大数字转换为整数模n

C: Convert big number from string to int modulo n

本文关键字:转换 整数 数字 字符串      更新时间:2023-10-16

我正在尝试将实数(>100位)从字符串转换为Zn加法组(模n)中的整数。n保证在标准的Cint范围内(比如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是一个有效的以null结尾的字符串,表示一个没有任何空格/额外格式的大整数。