#include <iostream>
#include "locale.h"
#include <stdio.h>
using namespace std;
int n, digit_amt = 0; //digit amount - количество разрядов
int max_digit(int num)
{
	int max = 0;
	while (num > 1)
	{
		num /= 10;
		max++;
	}
	return max;
}

int digit_value(int num, int digit)
{
	while (digit>1)
	{
		num /= 10;
		digit--;
	}
	return num % 10;
}

void radix_sort(int **dop_mas, unsigned int *mas, int digit)
{
	int *mas_col, i, j, temp = 0; //mas_col - в скольки числах есть определенная цифра (напр., mas_col[5] = 2 - в двух числах есть пятерка

	mas_col = new int[10]; //Здесь падает
	for (i = 0; i<10; i++)
		mas_col[i] = 0;
	for (i = 0; i<n; i++)
	{
		int a = digit_value(mas[i], digit);
		dop_mas[mas_col[a]][a] = mas[i]; //mas_col заполняется неправильно
		mas_col[a]++;
	}
	for (i = 0; i<n; i++)
	{
		for (j = 0; j<mas_col[i]; j++)
		{
			mas[temp] = dop_mas[j][i];
			temp++;
		}
	}
}

int main()
{
    unsigned int *mas;
	int digit, i, **dop_mas;
	cout << "Razmer massiva: " << endl;
	cin >> n;
	mas = new unsigned int[n];
	cout << "Elementy massiva: " << endl;
	for (i = 0; i<n; i++)
	{
		cout << "[" << i + 1 << "]= ";
		scanf("%x", &mas[i]);
	}
	dop_mas = new int*[n];
	for (i = 0; i<n; i++)
		dop_mas[i] = new int[n]; //Здесь скорее всего не n
	for (i = 0; i<n; i++)
		if (digit_amt < max_digit(mas[i]))
			digit_amt = max_digit(mas[i]); //3
	for (digit = 1; digit <= digit_amt; digit++) //
		radix_sort(dop_mas, mas, digit);
	for (i = 0; i<n; i++)
		cout << dec << mas[i] << endl;
	return 0;
}