思路:分等号左边和右边进行搜索
#include#include #include #include #include #define LL __int64using namespace std;char str[20];int n,ans;void right(LL sum,LL now,int cnt){ if(cnt==n) { if(sum==now) ans++; return ; } if(sum==0) return ; if(sum>=now*10+(LL)(str[cnt]-'0')) right(sum,now*10+(LL)(str[cnt]-'0'),cnt+1); if(sum>=now) right(sum-now,str[cnt]-'0',cnt+1); return ;}void left(LL sum,LL now,int cnt){ if(cnt) right(sum+now,str[cnt]-'0',cnt+1); if(cnt==n-1) return ; if(now) left(sum,now*10+(LL)(str[cnt]-'0'),cnt+1); left(sum+now,str[cnt]-'0',cnt+1);}int main(){ int i,j; while(scanf("%s",&str),str[0]!='E') { n=strlen(str); ans=0; left(0,0,0); printf("%d\n",ans); } return 0;}