主要还是一个10001的倍数的问题;
队友的思路: 01 1个数*10001,最后四位是这个数的后四位 比如 521456 10001 521456 521456 9 5215081456 从后面for过来,如果i比前面4个大,前第四位要+10,前第五位-1, 否则直接减,最后都会变成0,如果成立的话
比赛时的挫code…….
#include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<queue> #include<stack> #include<map> #include<algorithm> #include<string> using namespace std; const int N=10001000; #define ll long long #define mod 10000007 int n,m; char s[N]; int main() { int k = 1; while(~scanf("%s",s)) { printf("Case #%d: ",k++); int len = strlen(s); if(s[0] == '0' && len == 1) { printf("YES\n"); continue; } int flag = 0; for(int i = len-1; i >= 4; i--) { if(s[i] != '0') { if(s[i-4] >= s[i]) { s[i-4] = s[i-4] - (s[i]-'0'); s[i] = '0'; } else { s[i-4] = s[i-4]+10-(s[i]-'0'); s[i] = '0'; s[i-5]--; } } } for(int i = 0; i < len; i++) { if(s[i] != '0') flag = 1; } if(flag == 1) printf("NO\n"); else printf("YES\n"); } return 0; }