给定一个由数字组成的字符串 ss,请你计算能够被 44 整除的 ss 的子串数量。
子串可以包含前导 00。
例如,如果 ss 为 124
,则满足条件的子串有 44 个:12
,4
,24
,124
;如果 ss 为 04
,则满足条件的子串有 33 个:0
,4
,04
。
输入格式
一个由数字组成的字符串 ss。
输出格式
一个整数,表示满足条件的子串数量。
数据范围
前 44 个测试点满足 1≤|s|≤101≤|s|≤10。
所有测试点满足 1≤|s|≤3×1051≤|s|≤3×105。
输入样例1:
124
输出样例1:
4
输入样例2:
04
输出样例2:
3
输入样例3:
5810438174
输出样例3:
9
代码如下:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cout.tie(nullptr);
string s;
ll res = 0;
cin >> s;
for(int i = 0; i < s.size(); i ++) {
if((s[i] - '0') % 4 == 0) {
res ++;
}
}
for(int i = 0; i < s.size() - 1; i ++) {
if(((s[i] - '0') * 10 + s[i + 1] - '0') % 4 == 0) {
res += i + 1;
}
}
cout << res;
return 0;
}
思路:
能被4整除的数,末两位一定也能被4整除