问题
提供两个数据 a,b,计算 a%b 的余数。
你可能会觉得这个问题很简单。我们用 C++ 为例,如果 a 和 b 可以在 long long 表示范围,那么这个问题非常简单。但是如果 a 超过了 C++ 中 long long 都超过的数据,我们要如何求余数?
计算过程分析
比如求
443
%
3
443\ \% \ 3
443 % 3,我们先来演算一下。如下图,图像来自网络搜索。
下面我们来解释一下完整的计算过程:
1、第一个数字(百位)
4
4
4:
4
%
3
=
1
4\%3=1
4%3=1;
2、第二个数字 (十位)
4
4
4:
(
1
∗
10
+
4
)
%
3
=
2
(1*10+4)\%3=2
(1∗10+4)%3=2;
3、第三个数字(个位)
3
3
3:
(
2
∗
10
+
3
)
%
3
=
2
(2*10+3)\%3=2
(2∗10+3)%3=2。
说明最终
443
%
3
=
2
443\%3=2
443%3=2。
代码
因此,我们只需要模拟上面的过程进行计算即可。
//数据保存在字符串string s中
int calc(int x) {
int ans=0;
for (int i=0; i<s.length(); i++) {
ans*=10;
ans+=(s[i]-'0');
ans%=x;
}
return ans;
}
样例测评
我 OJ 上的巧妙的数,本题来自上海计算机学会竞赛 2021 年 4 月月赛丙组。