>>460 for GCCのみ。それが嫌ならcase '0' ...'9' を case '0': Case '1': って感じにしてくれ。
#include <stdio.h>
long A(char *str){
long ret=0,v=0;int s=1,s2=1,p=0;
do{ switch(*str){
case '0' ... '9': v = v * 10 + (*str - '0'); break;
case '+': s2 = +1; p=1;break;
case '-': s2 = -1; p=1;break;
case ' ': break;
case '=': p=1;break; }
if(p==1) {ret+= s*v;s=s2;v=0;p=0;}
}while(*(++str)!='\0'); return ret;
}
void fome(char *s){char buf[20],*b=s;strcpy(buf,s);
while(*b++){if(*b != ' '){*(++s) = *b;}}
}
void checknum(long m){
int n,s;
char buf [20]="1 2 3 4 5 6 7 8 9=",buf2[20];
for(n=0;n<8*8*8;n++){
char c0 = n & 0x07,c1 = (n>>3) & 0x07,c2 = (n>>6) & 0x07;
if(c0 == c1 || c1 == c2 || c0 == c2 || c1<c2) continue;
strcpy(buf2,buf); buf2[c0*2+1]='+'; buf2[c1*2+1]='-'; buf2[c2*2+1]='-';
fome(buf2);s=A(buf2);
if(s == m) { printf("%s%d\n",buf2,A(buf2));}
}
}
int main(){checknum(100);checknum(444);checknum(450);checknum(500);checknum(666);return 0;}