题意:给出一个数字字符串,问有多少个子串能被4整除
思路:分三种情况讨论,第一种子串长度为1的时候能被4乘除的,第二种子串长度为2的时候能被4乘除的,第三种子串长度大于2的时候能被4乘除的,首先第一种第二种都写,就是第三种,很简单比如一个数123 我们可以拆成 100 + 23 这是我们需要计算的就是 (100mod4 + 23mod4)mod 4 是不是等于0,其实我们也看的出来100mod4的结果肯定是0,同理可以推广到更大的数,其实这也就说明了能被4整除的三位数其实只要看最后两位数能不能被4乘除就好了
#include<stdio.h>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
typedef long long ll;
string str;
int main(){
cin >> str;
ll sum=0;
for(int i=0; i<str.size(); ++i){
if((str[i]-'0')%4==0) sum++;
if(i>0){
int ans = (str[i-1]-'0')*10 + (str[i]-'0');
if(ans%4==0) sum=sum+1+(i-1);
}
}
cout << sum << endl;
return 0;
}