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 C (judge verdict: Time Limit Exceeded)

#include <stdio.h>

void swap(char *a, char *b);
void sort(char *num, int way);
int convert_int(char *num);

int main(void)
{
	int i, j;
	int n;
	int high, low;
	char num[9];
	
	while (scanf("%d", &n), n){
		scanf("%s", num);
		
		sort(num, 0);
		high = convert_int(num);
		sort(num, 1);
		low = convert_int(num);
		
		printf("%d\n", high - low);
	}
	
	return (0);
}

void swap(char *a, char *b)
{
	char tmp;
	
	tmp = *a;
	*a = *b;
	*b = tmp;
}

void sort(char *num, int way)
{
	int i, j;
	
	for (i = 0; i < 8; i++){
			for (j = 7; j > i; j--){
				if (way){
					if (num[j] - '0' < num[j - 1] - '0'){
						swap(&num[j], &num[j - 1]);
					}
				} else {
					if (num[j] - '0' > num[j - 1] - '0'){
						swap(&num[j], &num[j - 1]);
					}
				}
			}
		}
}

int convert_int(char *num)
{
	int i;
	int ans = 0;
	int weight = 1;
	
	for (i = 7; i >= 0; i--){
		ans += weight * (num[i] - '0');
		weight *= 10;
	}
	
	return (ans);
}