我正在尝试在Z n 添加剂组(模数n)中将真正的大数字(> 100位)从字符串转换为整数。 n保证在标准C int范围内(比如n = 12345)。
atoi的简单方法既不是“%”,也不是BigIntiger。
任何想法如何实现?
答案 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结尾的字符串,表示一个没有任何空格/其他格式的大整数。