奥数题。
一个数字是五的倍数的话,这个数末尾一定是零或五,如果是四的倍数的话,末尾两位一定是四的倍数,我们可以枚举每一个数作为末尾,如果该数的这一位和上一位组成的十位数为四的倍数,那么以这两个数为末尾的数字就是四的倍数(但该位不一定是四的倍数,要判断),如果末尾是五或零,就是五的倍数,并且以这个数为末尾的数字就是五的倍数,(提醒:如果数字为四或八,那么这个数也是四的倍数,但以其为末尾的数不一定是四的倍数,且以该数的这一位和上一位组成的十位数不一定为四的倍数,要特判。我就被这种情况卡了很久)将这些数字为末尾的数字总数之和加起来即为答案。
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){int ans=0;string s;cin>>s;int len=s.size()-1;for(int i=len;i>=0;i--){if(s[i]=='5'||s[i]=='0') {ans=ans+i+1; }else if(((s[i]-'0')+(s[i-1]-'0')*10)%4==0){ans=ans+i+1;if(s[i]=='2'||s[i]=='6'){ans--;} }else if(s[i]=='4'||s[i]=='8')ans++;}cout<<ans;return 0;
}