简单深搜
#include<stdio.h> __int64 n,count; int a[15],num; char str[30]; void dfs(int op,__int64 sum) { if(op==num&&sum==n) { count++; } if(op==num)return ; __int64 k=0; for(int i=op;i<num;i++) { k=k*10+a[i]; dfs(i+1,sum+k); if(op!=0) dfs(i+1,sum-k); } } int main() { int i; char s[15]; while(scanf("%s%I64d",s,&n)!=-1) { count=0; for(i=0;s[i];i++) a[i]=s[i]-'0'; num=i; dfs(0,0); printf("%I64d\n",count); } return 0; }