Problem:
整数の差

8 個の 0 から 9 までの数字を入力したとき、その 8 個の数字を並べ替えてできる、最大の整数と最小の整数の差を出力するプログラムを作成してください。並び替えてできる数は 00135569 のように 0 から始まってもよいものとします。

Input

複数のデータセットが与えられます。１行目にデータセット数 n (n ≤ 50) が与えられます。続いて n 行のデータが与えられます。各データは 8 個の数字の並び（0 から 9 の数字）です。

Output

各データセットに対して、入力された数字を並べ替えてできる最大の整数と最小の整数の差を１行に出力して下さい。

Sample Input

2
65539010
65539010

Output for the Sample Input

96417531
96417531

Solution in JAVA (judge verdict: Time Limit Exceeded)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {

		List<Integer> list = new ArrayList<Integer>();
		List<String> strList = new ArrayList<String>();
		List<String> strReverseList = new ArrayList<String>();
		for(int i = 0; i < 8; i++){
			list.add(0);
		}

		String union = "";
		String unionReverse = "";
		int max = 0;
		int min = 0;

		InputStreamReader is = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(is);

		int cnt = 0;

		int num = Integer.parseInt(br.readLine());

		while(cnt< num){

			String str;
			while((str=br.readLine())!=null){
				String[] sp = str.split("");
				for(int i = 0; i < 8; i++){

					list.set(i, Integer.parseInt(sp[i]));
				}

				Collections.sort(list);

				for(int i = 0; i < 8; i++){
					strList.add(String.valueOf(list.get(i)));
				}
				for(int i = 0; i < 8; i++){
					union = union.concat(strList.get(i));
				}

				min = Integer.parseInt(union);

				Collections.reverse(list);

				for(int i = 0; i < 8; i++){
					strReverseList.add(String.valueOf(list.get(i)));
				}
				for(int i = 0; i < 8; i++){
					unionReverse = unionReverse.concat(strReverseList.get(i));
				}

				max = Integer.parseInt(unionReverse);

				System.out.println();
				System.out.println(max - min);
			}
		}
	}

}