枚舉所有符號可能添加的情況。
{
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。