问题描述
假设我有一个很大的数字(大约10 ^ 5位数字),我必须计算num%a,其中a小于10 ^ 9,即它在C ++的int范围内。有这样的代码:-
int res = 0;
//num contains the large number stored as a string
for (int i = 0; i < num.length(); i++) {
res = (res*10 + (int)num[i] - '0') % a;
}
return res;
我知道此解决方案使用模块化算术,但我不明白为什么每次迭代时将 res 乘以10。
假设我有一个数字32471。
根据此代码,第一步将是
(0 * 10 + 3) % a
为什么这10个?不应该
(0 % a + (3 * 10^4) % a) % a
依此类推,根据模块化算法?
有人可以解释一下我们是怎么到达的吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)