数字操作
这道题并不需要高精度。我们把数字当字符串读入进来,把数字倒过来考虑,
然后用 ai 表示第 i 位的数字。
一个小学奥数常识:一个数是 4 的倍数,等价于它的最后两位是 4 的倍数。(为
什么?)
倒过来之后,也就相当于我们只需要管前两位是啥就行。
首先,我们可以考虑啥都不删,那么只需要判断前两位组成的数字是否是 4
的倍数。
简单写一下:
#include <bits/stdc++.h> using namespace std; const int MAXN = 1e3 + 5; int t, m; string s; int a[MAXN]; int main() { ios::sync_with_stdio(false); cin>>t; while(t--) { cin>>s; m=s.size(); for(int i=m-1;i>=0;i--) a[m-i]=s[i]-'0'; int flag=0; if(m==1&&a[1]%4==0) flag=1; for(int i=1;i<m;i++) if((a[i+1]*10+a[i])%4==0) flag=1; for(int i=2;i<=m;i++) if((a[i]*10+a[1])%4==0) flag=1; if(flag==1) printf("Yes\n"); else printf("No\n"); } return 0; }