Problem:
すべての数は６１７４に通ず

0 から 9 の数字からなる四桁の数 N に対して以下の操作を行う。

N の桁それぞれの数値を大きい順に並べた結果得た数を L とする

N の桁それぞれの数値を小さい順に並べた結果得た数を S とする

差 L-S を新しい N とする(1回分の操作終了)

新しい N に対して 1. から繰り返す

このとき、全桁が同じ数字(0000, 1111など)である場合を除き、あらゆる四桁の数はいつかは 6174になることが知られている。例えば N = 2012の場合

       1回目 (N = 2012): L = 2210, S = 0122, L-S = 2088

       2回目 (N = 2088): L = 8820, S = 0288, L-S = 8532

       3回目 (N = 8532): L = 8532, S = 2358, L-S = 6174

となり、3 回の操作で 6174 に到達する。

0 から 9 の数字からなる四桁の数が与えられたとき、何回の操作で 6174 に到達するか計算するプログラムを作成して下さい。

入力

入力は複数のデータセットからなる。入力の終わりは 0000 が１つの行で示される。各データセットは以下の形式で与えられる。

N

データセットは１行であり、N (1 ≤ N ≤ 9999) は四桁の数を示す。N < 1000 の場合は上の桁は 0 で埋められている。

データセットの数は 10000 を超えない。

出力

各データセットごとに何回の操作で 6174 に到達したかを１行に出力する。ただし全桁が同じ数字である数が入力として与えられた場合は NA と出力する。

入力例

6174
2012
3333
0000

出力例

0
3
NA

Solution in C++14 (judge verdict: Accepted)

#include <bits/stdc++.h>
using namespace std;
int main(void)
{	
	string n,n1,n2,n3,y3;
	string x1,y1,y2,g="1000";
	int x=0;
	int i,x2;
	int flg=0;
	int a[5],b[5],c[5];
	while(1){
		cin>>n;
		if(n=="0000"){
			break;
		}
		flg=0;
		x=0;
		while(1){
			n1="";
			n2="";
			n3="";
			x1="";
			y1="";
			y2="";
			y3="";
			
			for(i=0;i<4;i++){
				x1=n[i];
				a[i]=stoi(x1);
			}
			if(n=="6174"){
				break;
			}
			if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]){
				flg=1;
				break;
			}
			
			//一回目
			sort(a,a+4,greater<int>());
			/*for(i=0;i<4;i++){
				cout<<a[i];
			}
			cout<<endl;*/
			//x++;
			for(i=0;i<4;i++){
				b[i]=a[i];
				x2=a[i];
				y3=to_string(x2);
				n1+=y3;
			}
			if(n1=="6174"){
				break;
			}
			
			//二回目
			sort(a,a+4);
			/*for(i=0;i<4;i++){
				cout<<a[i];
			}*/
			//cout<<endl;
			//x++;
			for(i=0;i<4;i++){
				c[i]=a[i];
				x2=a[i];
				n2+=to_string(x2);
			}
			//cout<<n2<<endl;
			if(n2=="6174"){
				break;
			}
			//三回目
			//x++;
			for(i=0;i<4;i++){
				int f1=c[i];
				y1+=to_string(f1);
				int f2=b[i];
				y2+=to_string(f2);
			}
			//cout<<y1<<" "<<y2<<endl;
			int m;
			m=stoi(y1);
			int e;
			e=stoi(y2);
			int h;
			h=e-m;
			
			//cout<<m<<" "<<e<<endl;
			//cout<<h<<endl;
			n3=to_string(h);
			if(h<1000){
				n3="0"+n3;
			}
			//cout<<n3<<endl;
			x++;
			if(n3=="6174"){
				break;
			}
			n=n3;
			
		}
		if(flg==1){
			cout<<"NA"<<endl;
		}
		else{
			cout<<x<<endl;
		}
	}
	return 0;
}