就是个深度优先搜索。枚举所有符号可能添加的情况。 { s=0; /*该方式下的和*/ m=1; /*作操作数*/ n=i; /*获取i在3进制下的每一位会破坏i,所以借用变量n来获取*/ op='+'; /*第一次操作方式为+*/ ptr=0; /*指针用来记录运算过程*/ str[ptr++]='1'; /*首先记录一个1*/ for (j=2;j<=9;j++) /*八次循环,每次的下一个操作数是j*/ { if (n%3) /*3进制下的第j-1位数,如果不是0,则要完成先前的操作*/ { if (op=='+') s+=m; else s-=m;m=j; } 这段是在做拆符号的事情,就是根据i的值确定那8个空格填什么 switch(n%3) /*根据这一位的情况进行处理*/ { case 0:m=m*10+j;break; case 1:op='+';break; case 2:op='-';break; } if (n%3) str[ptr++]=op; /*记录运算模式*/ str[ptr++]='0'+j; n/=3; } 就是按照填好的符号,计算表达式的结果然后就是判断是不是是100。