用了小根堆和大根堆。
#include <cstdio>
#include <queue>
#include <cmath>
using namespace std;
void vailable(int t){
priority_queue<int,vector<int>,greater<int> >q;
priority_queue<int,vector<int>,less<int> >p;
//压入堆中
q.push(t/1000);p.push(t/1000);t%=1000;
q.push(t/100);p.push(t/100);t%=100;
q.push(t/10);p.push(t/10);t%=10;
q.push(t);p.push(t);
//从堆中弹出
int a=0,b=0;
for(int i=3;i>=0;i--) {
a=a+p.top()*pow(10,i); p.pop();
b=b+q.top()*pow(10,i); q.pop();
}
int ans=a-b;
printf("%04d - %04d = %04d\n",a,b,ans);//输出格式
if(ans!=6174) vailable(ans);
}
int main(){
int n;if( scanf("%d",&n) );
if(n%1111==0) printf("%0d - %04d = 0000",n,n);//特殊情况
else vailable(n);
}