РАЗЛОЖЕНИЕ НА АРИФМЕТИЧЕСКИЕ ЭЛЕМЕНТЫ! Code: long numb=48411095; char str[100]; struct dcsi { char znak; int len; int flag; }; dcsi decision[50]; long my_step(char *zstr,long rez,int my_level) { long l; int len,i; char buf[50]; len=strlen(zstr); if(len==0) { i=0; if(rez==numb) { decision[my_level].flag=-1; return 1; } else return -1; } else { for(i=1,l=-1;i<=len && l==-1;i++) { memmove(buf,zstr,i); buf[i]=0; decision[my_level].znak='+'; decision[my_level].len=i; decision[my_level].flag=1; l=my_step(zstr+i,rez+atol(buf),my_level+1); if(l==-1) { decision[my_level].znak='-'; decision[my_level].len=i; decision[my_level].flag=1; l=my_step(zstr+i,rez-atol(buf),my_level+1); } } } return l; } ^-- основная рекурсивная функкция ................ char dstr[100]; numb=atol(str2); strcpy(str,"358279013364995"); if(my_step(str,0,0)==1) { for(int i=0;decision[i].flag==1;i++) { printf("%c-%d\r\n",decision[i].znak,decision[i].len); } } printf("Finish\r\n"); поскольку с арифметикой не была простора ....деление на крупные единицы не давало результата (разбиение на мелкие не даст никогда такой большой цифры 8))) если не использовать умножения).... разбил и второе на 2 слагаемых ВРУЧНУЮ(что первое взбрело в голову)!