/* 看别人的的思路 搜索搜不出来我太挫了 状态压缩枚举+好的位置 */ #include<stdio.h> #include<string.h> #define N 20 int lower[N]; char s[N]; int len; int judge(int deng,int l,int r) { int i,f1,f2; int sum1,sum2; f1=s[0]-'0'; sum1=0; for(i=1;i<deng;i++) {//根据状态求出左边的所有和 if(lower[i-1]&l) { sum1+=f1; f1=s[i]-'0'; } else f1=f1*10+s[i]-'0'; } if(f1) sum1+=f1; f2=s[deng]-'0'; sum2=0; for(i=1;i<len-deng;i++) {//根据状态求出右边的所有和 if(lower[i-1]&r) { sum2+=f2; f2=s[i+deng]-'0'; } else f2=f2*10+s[i+deng]-'0'; } if(f2) sum2+=f2; if(sum1==sum2)return 1; return 0; } int main() { int m,i,j,k,left,right; lower[0]=1; for(i=1;i<=19;i++) lower[i]=lower[i-1]*2; while(scanf("%s",s),strcmp(s,"END")) { len=strlen(s); m=0; for(i=1;i<len;i++) {//枚举等号 left=lower[i-1];//左边的所有状态 right=lower[len-1-i];//右边的所有状态 for(j=0;j<left;j++) for(k=0;k<right;k++) if(judge(i,j,k))//判断 m++; } printf("%d ",m); } return 0;}