Solution
多动手多动手;
我们判断S[...,i]
这个前缀串, 是否可以整除
M
M
M, 从算术本质来看, 令p = S[..., i-1]
, 则有: p * 10 + S[i] (%M) = 0
, 即(p%M) * 10 + S[i] (%M) = 0
故, 我们只需令p = S[..., i-1] % M
, 然后执行p *= 10, p += S[i], p %= M
也就是, 在i
时 令p
为S[...,i] % M
即可;
所以本题的核心, 就是将 M | a
这个整除问题, 转换为 a % M == 0
这个取模问题!
Code
vector<int> divisibilityArray(string S, int M) {
long long p = 0;
int n = S.size();
vector< int> ans( n, 0);
for( int i = 0; i < n; ++i){
p *= 10; p %= M;
int c = (S[ i] - '0');
p += c; p %= M;
if( p == 0){
ans[ i] = 1;
}
}
return ans;
}