int main() //主函数
{char s[100]; //定义一个足够大的数组用于存数字
int a,n=0, //n是数字个数,a是组合出来的最大数
i,j; //i,j为循环变量
gets(s); //接受一个字符串
printf("输入的字符串为:%s\n",s); //输出字符串
while(s[n++]);n--; //求出s字符串的长
for(i=0;ifor(j=0;j if(s[j] {a=s[j]; //将这两个数对调
s[j]=s[j+1]; //这样可以实现数组的降序排列
s[j+1]=a;}
a=0; //把a归零
for(i=0;i{if(s[i]>='0'&&s[i]<='9') //如果数组中的字符是数字
a=a*10+s[i]-'0';} //累加出a的值
printf("可以组成的最大数是:%d\n",a); //输出结果
system("PAUSE"); //暂停
return 0;} //结束
其实是利用十进制来做,如4321可写成,4×10的3三次方加3乘以10的二次方加2乘以10的1次方加上1.即可的到结果,因为你只需改变4321的顺序,然后按照上述的方法计算,然后赋值给一个变量,输出变量即可。