提供两个数据 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 月月赛丙组。