Вообще, задача о перестановках несолкько усложняет реализацию. Нам необходимо забраковывать сочетания с одинаковыми цифрами в числе (типа 001 010 100). Можно конечно сгенерить все состояния слова и отсеять лишние - но это ппц костыль.
Есть один вариант на примете - но хотелсоь бы его подшлифовать. Кстати, вот весь код (помимо генрации), сделанный по моим советам.
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
#include<malloc.h>
#include<conio.h>
int fact(int a){
if(a<=1)return 1;
int s=1;
for(int i=2;i<=a;i++){
s*=i;
}
return s;
}
void main(){
cin>>resetiosflags(ios::skipws);
int act_indx=0;
int i,j,k;
int sz;
char *s=new char[1];
char b;
int N,P;
while(true){
cin>>b;
if(b==10){break;}
s[act_indx]=b;
act_indx++;
s=(char*)realloc(s,act_indx+1);
}
cout<<"input - ok\n";
for(i=0;i<act_indx;i++){
cout<<s[i];
}
cout<<endl;
sz=act_indx;
for(i=0;i<sz-1;i++){
b=s[i];
for(j=i+1;j<sz;j++){
if(b==s[j]){
for(k=j;k<sz-1;k++){
s[k]=s[k+1];
}
sz--;
j--;
}
}
}
cout<<"compress ok\n";
for(i=0;i<sz;i++){
cout<<s[i];
}
cout<<endl;
N=sz;
P=fact(N);
cout<<"total="<<P<<endl;
char *W=new char[N];
//
//---------------- =((
//
delete[]s;
delete[]W;
getch();
}
комменатриев нет - это плохо
имена переменных - неинутивны
код слабо фоматирован - жуть
нет всяческих обёрточек-контейнеров типа CString - олд_скуловое перевыделение рулит
привычные манипуляторы потока - чсв овер9к