C:将大数字从字符串转换为int modulo n

时间:2015-12-15 13:03:44

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

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

atoi的简单方法既不是“%”,也不是BigIntiger。

任何想法如何实现?

1 个答案:

答案 0 :(得分:3)

我会假设你的问题意味着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结尾的字符串,表示一个没有任何空格/其他格式的大整数。