高精度取余
原理:
任何一个数,都可以被表示成
也就是一个十进制数的表示形式 ,类似二进制数。
如何形象理解
sum = (sum * 10 % mod + c) % mod;
这段代码呢?
假设算到这个就 大于我们的mod的了 , 那么其实这里直接对它取余即可,不影响后面的运算。因为取余运算对加法和乘法是自由的。
如果不了解,乘法和加法为什么是自由的。请查一下取余的性质。 这样就可以实现高精度数取模的操作了。
#include <iostream>
#include <cstring>
#include <algorithm>
#define LL long long
#define PII std::pair<int , int>
const int N = 100010 , mod = 1000000007;
int main(){
std::ios::sync_with_stdio(0);
std::cout.tie(0);
std::cin.tie(0);
std::string s;
std::cin >> s;
LL sum = 0;
for (int i = 0; i < int(s.size()); i ++ ){
int c = s[i] - '0';
sum = (sum * 10 % mod + c) % mod;
}
std::cout << sum << '\n';
return 0;
}